美文网首页
Python 错误处理、logging模块

Python 错误处理、logging模块

作者: 李霖弢 | 来源:发表于2019-12-26 16:18 被阅读0次

    错误处理

    try...except...finally...

    BaseException类是所有错误类的基类
    如下ZeroDivisionErrorBaseException的子类,所以如果发生ZeroDivisionError错误,总会被BaseException先捕获而不会进入ZeroDivisionError

    try:
        print('try...')
        r = 10 / int('2')
        print('result:', r)
    except BaseException as e:
        print('BaseException:', e)
    except ZeroDivisionError as e:
        print('ZeroDivisionError:', e)
    else:
        print('no error!')
    finally:
        print('finally...')
    print('END')
    
    with

    如表达式执行成功,其返回资源会授予变量名,待内容执行完毕后释放资源。如执行失败也不会捕获错误,程序照常中断,但资源依然会被释放。

    with open('nemo.txt') as f:
        print(f.read())
        
    print(f.closed) # True
    
    抛出错误

    可以通过raise抛出一个系统自带的错误实例,也可以自定义一个错误实例并抛出

    class FooError(ValueError):
        pass
    
    def foo(s):
        n = int(s)
        if n==0:
            raise FooError('invalid value: %s' % s)
        return 10 / n
    
    foo('0')
    
    断言

    assert判断为True时同pass,False时将会抛出错误
    当执行时可以通过python -O <文件名>的方式关闭assert,此时均视为pass

    assert n != 0, 'n is zero!'
    
    单元测试
    文档测试

    logging模块

    logging模块是Python内置的标准模块,主要用于输出运行日志,比起print,logging可以在不同场景根据日志等级(默认为logging.WARNING)决定是否输出,且可以将日志保存到文件。

    基础函数
    函数 说明
    logging.debug(msg, *args, **kwargs) 创建一条严重级别为DEBUG的日志记录
    logging.log(level, *args, **kwargs) 创建一条严重级别为level的日志记录
    logging.basicConfig(**kwargs) 对root logger进行一次性配置
    • 其中debug方法可以替换为info()warning()error()critical(),其日志等级依次提高。

    通过logging.basicConfig()可以配置日志格式、等级、输出位置等

    import logging
    logging.basicConfig(format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s',
                        level=logging.DEBUG,
                        datefmt = '%Y-%m-%d  %H:%M:%S %a',
                        filename='new.log',
                        filemode='a',#模式,默认为a,追加模式。w则为覆写模式
    )
    logging.info("hello world")
    

    也可以通过handlers指定编码类型等

    import logging
    fh = logging.FileHandler(encoding='utf-8', mode='a', filename='logger.log')
    sh = logging.StreamHandler() #如无sh则不会在命令行输出错误
    logging.basicConfig(handlers=[
        sh, fh], format='%(asctime)s - %(pathname)s[line:%(lineno)d] - %(levelname)s: %(message)s', level=logging.DEBUG)
    logging.info("hello world")
    

    相关文章

      网友评论

          本文标题:Python 错误处理、logging模块

          本文链接:https://www.haomeiwen.com/subject/nozkoctx.html