一:print
代码运行出错,我们可以使用print输出语句来查看变量的值,从而找到问题点,但这种方式比较麻烦,我们或许需要在多个地方加上print语句才能准确的找出问题所在。并且当我们改正错误以后还需要将print删除,否则影响代码的美观。
二:assert 断言
凡是调试时用到print的地方我们都可以换成 assert
如下
def foo(s):
n = int(s)
assert n != 0, 'n is zero!' #如果n不等于0会抛出异常,并显示逗号后面的字符串
return 10 / n
if __name__ == '__main__':
foo('0')
C:\Users\Administrator\Desktop>python err.py
Traceback (most recent call last):
File "err.py", line 7, in <module>
foo('0')
File "err.py", line 3, in foo
assert n != 0, 'n is zero!'
AssertionError: n is zero!
我们可以看出,使用断言的地方,如果 assert 后面的结果为flase,则会抛出一个AssertionError异常。
当我们将bug改掉以后,可以使用 python -O 来执行脚本,从而屏蔽掉assert。
注意 是大写的 字母 O
C:\Users\Administrator\Desktop>python -O err.py
Traceback (most recent call last):
File "err.py", line 7, in <module>
foo('0')
File "err.py", line 4, in foo
return 10 / n
ZeroDivisionError: division by zero
三:logging
和assert相比,logging不会抛出异常,且可以输出到文件
日志分为如下几个等级
日志等级(level) | 描述 |
---|---|
DEBUG | 最详细的日志信息,典型应用场景是 问题诊断 |
INFO | 信息详细程度仅次于DEBUG,通常只记录关键节点信息,用于确认一切都是按照我们预期的那样进行工作 |
WARNING | 当某些不期望的事情发生时记录的信息(如,磁盘可用空间较低),但是此时应用程序还是正常运行的 |
ERROR | 由于一个更严重的问题导致某些功能不能正常运行时记录的信息 |
CRITICAL | 当发生严重错误,导致应用程序不能继续运行时记录的信息 |
日志可使用的函数
函数 | 说明 |
---|---|
logging.debug(msg, *args, **kwargs) | 创建一条严重级别为DEBUG的日志记录 |
logging.info(msg, *args, **kwargs) | 创建一条严重级别为INFO的日志记录 |
logging.warning(msg, *args, **kwargs) | 创建一条严重级别为WARNING的日志记录 |
logging.error(msg, *args, **kwargs) | 创建一条严重级别为ERROR的日志记录 |
logging.critical(msg, *args, **kwargs) | 创建一条严重级别为CRITICAL的日志记录 |
logging.log(level, *args, **kwargs) | 创建一条严重级别为level的日志记录 |
logging.basic |