- class SelfException(Exception):
- pass
- def main():
- firstMethod()
- def firstMethod():
- secondMethod()
- def secondMethod():
- thirdMethod()
- def thirdMethod():
- raise SelfException("自定义异常信息")
- main()
Traceback (most recent call last):
File "C:\Users\mengma\Desktop\1.py", line 11, in <module>
main()
File "C:\Users\mengma\Desktop\1.py", line 4, in main <--mian函数
firstMethod()
File "C:\Users\mengma\Desktop\1.py", line 6, in firstMethod <--第三个
secondMethod()
File "C:\Users\mengma\Desktop\1.py", line 8, in secondMethod <--第二个
thirdMethod()
File "C:\Users\mengma\Desktop\1.py", line 10, in thirdMethod <--异常源头
raise SelfException("自定义异常信息")
SelfException: 自定义异常信息
很多初学者一看到输出结果所示的异常提示信息,就会惊慌失措,他们以为程序出现了很多严重的错误,其实只有一个错误,系统提示那么多行信息,只不过是显示异常依次触发的轨迹。
其实,上面程序的运算结果显示的异常传播轨迹信息非常清晰,它记录了应用程序中执行停止的各个点。最后一行信息详细显示了异常的类型和异常的详细消息。从这一行向上,逐个记录了异常发生源头、异常依次传播所经过的轨迹,并标明异常发生在哪个文件、哪一行、哪个函数处。print_exception(etype, value, tb[,limit[, file]])
,在完整形式中,前面三个参数用于分别指定异常的如下信息:print_exception(sys.exc_etype, sys.exc_value, sys.exc_tb[, limit[, file]])
也就是说,使用 print_exc([limit[, file]]) 会自动处理当前 except 块所捕获的异常。该方法还涉及两个参数:
- # 导入trackback模块
- import traceback
- class SelfException(Exception): pass
- def main():
- firstMethod()
- def firstMethod():
- secondMethod()
- def secondMethod():
- thirdMethod()
- def thirdMethod():
- raise SelfException("自定义异常信息")
- try:
- main()
- except:
- # 捕捉异常,并将异常传播信息输出控制台
- traceback.print_exc()
- # 捕捉异常,并将异常传播信息输出指定文件中
- traceback.print_exc(file=open('log.txt', 'a'))
运行上面程序,同样可以看到在控制台输出异常传播信息,而且在程序目录下生成了一个 log.txt 文件,该文件中同样记录了异常传播信息。
联系客服