异常处理
- 捕捉异常可以使用try/except语句
- try/except语句用来检测try语句块中的错误,从而让except语句捕获异常信息并处理
- try/finally 语句无论是否发生异常都将执行最后的代码
看个例子
try:
a = 1 / 0
except Exception as e:
print(e)
finally:
print('finished!')
输出结果
integer division or modulo by zero
finished!
但实际在运行一个复杂脚本的时候,有些时候程序出错了需要知道是函数哪一行报错,这个时候可以使用traceback定于报错的位置
看个例子
import traceback
try:
a = 1 / 0
except Exception as e:
traceback.print_exc()
finally:
print('finished!')
输出结果
Traceback (most recent call last):
File "/Users/johnson/PycharmProjects/others/traceback/test1.py", line 4, in <module>
a = 1 / 0
ZeroDivisionError: integer division or modulo by zero
finished!
通过直接输出程序报错的位置,非常有利于调试程序
当然,traceback还有其他的方法,比较常用的有:
- format_exc() 返回字符串,即traceback.print_exc()与print traceback.format_exc()效果是一样的
- print_exc() 则直接给打印出来,接受file参数直接写入到一个文件
traceback.print_exc(file=open(‘tb.txt’,’w+’)),写入到tb.txt文件去
关于traceback更多的用法,可以参考https://docs.python.org/2/library/traceback.html
用户自定义异常
Python中的raise 关键字用于引发一个异常
b = 1
if b < 2:
raise Exception('error',b)
print('finished')
输出结果
Traceback (most recent call last):
File "PycharmProjects/others/traceback/test1.py", line 12, in <module>
raise Exception('error',b)
Exception: ('error', 1)
需要注意的是使用raise引发异常之后,程序就终止运行了
raise关键字后面是抛出是一个通用的异常类型(Exception),一般来说抛出的异常越详细越好,Python在exceptions模块内建了很多的异常类型
具体的exceptions可以参考https://docs.python.org/2/tutorial/errors.html