作用
常用方法
import traceback
try:
raise SyntaxError("traceback test")
except Exception as e:
fp = open("test1.txt", "w", encoding="utf-8") # 创建内存文件对象
traceback.print_exc(file=fp)
traceback.print_exc()
print(traceback.format_exc())
异常信息获取 sys.exc_info()
import traceback
import sys
try:
raise SyntaxError("traceback test")
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()#元组
print(exc_type, exc_value, exc_traceback)
print(sys.exc_info())
#<class 'SyntaxError'> traceback test <traceback object at 0x000001F8306BA988>
#(<class 'SyntaxError'>, SyntaxError('traceback test',), <traceback object at 0x000001F8306BA988>)
打印栈的跟踪信息 traceback.print_tb(traceback[, limit[, file]])
file: 这个是设置打印的输出流的,可以为文件,也可以是stdout之类的file-like object。如果不设或为None,则输出到sys.stderr
import traceback
import sys
def traceback_test():
try:
raise SyntaxError('traceback_test')
except Exception as e:
traceback.print_tb(e, limit=1, file=sys.stdout)
if __name__ == '__main__':
traceback_test()
#错误信息
Traceback (most recent call last):
File "D:/MH_code/test_flask_project/app/traceback.py", line 14, in <module>
traceback_test()
File "D:/MH_code/test_flask_project/app/traceback.py", line 11, in traceback_test
traceback.print_tb(e, limit=1, file=sys.stdout)
File "C:\Python27\lib\traceback.py", line 61, in print_tb
f = tb.tb_frame
AttributeError: 'exceptions.SyntaxError' object has no attribute 'tb_frame'
打印异常信息 traceback.print_exception(type, value, traceback[, limit[, file]])
如果是语法错误, 会打印对应的代码行数, 用”^”指明语法错误的位置
import traceback
import sys
def traceback_test():
try:
raise SyntaxError('traceback_test')
except Exception as e:
exc_type, exc_value, exc_traceback = sys.exc_info()
traceback.print_exception(exc_type, exc_value, exc_traceback,limit=2,file=sys.stdout)
if __name__ == '__main__':
traceback_test()
#错误信息
Traceback (most recent call last):
File "C:/Users/24479/Desktop/作业上传/个人总结区/方法学习/test.py", line 7, in traceback_test
raise SyntaxError('traceback_test')
File "<string>", line None
SyntaxError: traceback_test
简写,常用traceback.print_exc([limit[, file]])
自动执行exc_info()来帮助获取这三个参数
成功的异常处理应该实现如下4个目标
滥用异常机制会带来负面影响,过度使用异常体现在两个方面:
要注意的是:异常处理机制的初衷是将不可预期异常的处理代码和正常的业务逻辑处理代码分离,因此绝不要使用异常处理来代替正常的业务逻辑判断。另外,异常机制的效率比正常的流程控制效率差,所以不要使用异常处理来代替正常的程序流程控制。
? try 块的代码过于庞大会造成 try 块中出现异常的可能性大大增加,导致分析异常原因的难度也大大增加。try 块很庞大时,后面需要大量的 except 块才可针对不同的异常提供不同的处理逻辑,在同一个 try 块后使用大量的 except 块则需要分析它们之间的逻辑关系,反而增加编程复杂度。
? 所以大的 try 块可分割成多个可能出现异常的程序段落,并将其放在单独的 try 块中,从而分别捕获并处理异常。
当产生异常时,在 except 块里应做一些有用的事情,如处理并修复异常,不能将 except 块设置为空或者简单的打印异常信息。对异常采取适当的措施,例如
原文:https://www.cnblogs.com/mayangin/p/11938545.html