错误处理
try...except...finally...
,不同类型的错误由不同的except
语句块处理,如果没有错误发生,可以在except
语句块后面加一个else
,没有错误发生时,执行else
语句,finally
语句如果有,一定会被执行(可以没有finally
语句)。
try:
print('try...')
r = 10 / int('2')
print('result:', r)
except ValueError as e:
print('ValueError:', e)
except ZeroDivisionError as e:
print('ZeroDivisionError:', e)
else:
print('no error!')
finally:
print('finally...')
print('END')
调用堆栈,如果错误没有被捕获,一直往上抛,最终由Python解释器捕获,打印错误信息后程序退出。
记录错误,logging.exception(e)
,程序打印完错误信息后会继续执行。
抛出错误,我们可以自定义错误的class
,选择好继承关系。用raise
语句抛出一个错误的实例。raise
语句如果不带参数,会把当前错误原样抛出,让顶层调用者处理。
调试
print()
,打印有可能出问题的变量。
断言assert
,如果断言失败,assert
语句会抛出AssertionError
。python -o file.py
关闭断言。
logging
,允许指定记录信息的级别,有debug
、info
、warning
、error
等几个级别。通过配置,一条语句可以输出到不同地方,如console和文件。
import logging
logging.basicConfig(level = logging.INFO) # 控制输出哪个级别的信息
调试器pdb,python -m pdb file.py
,命令l
可以查看代码,命令n
可以单步执行代码,任何时候可以出入命令p 变量名
来查看变量,命令q
结束调试。
pdb.set_trace()
,在可能出错的地方放一个set_trace
,可以设置一个断点,程序会在pdb.set_trace()
暂停并进入调试环境,命令p
查看变量,命令c
继续运行。
支持调试功能的IDE,如PyCharm,Eclipse+pydev插件。