python使用traceback获取异常信息

异常处理

  • 捕捉异常可以使用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值