【Python】【异常的获取与处理】

一、traceback模块(import traceback)

1. traceback.print_exc()    # 直接打印出来

   traceback.print_exc(file=open("test.txt","a+")    # 若没有test.txt文件,则新建一个,写入调试信息,若存在,则在后面追加

2.traceback.print_expection()     #返回字符串

3.traceback.format_expection(type,value,tb[,limit])     # 格式化栈信息和异常信息,返回一个列表,包括代码文件和代码行,以及异常信息。

4.traceback.extract_tb(traceback,[,limit])  # 返回一个跟踪对象traceback的元祖列表,元组内容为(filename.line number, function name, text)。

二、sys模块

sys.exc_info() ,返回值是一个三元组(type,value/message,traceback),其中type表示异常的类型,value/message表示异常的信息或者参数,而traceback则包含调用栈信息的对象。sys.exc_info()可以直接定位最终引发异常的原因,结果比较简洁,但是缺点是难以直接确定引发异常的代码位置。

具体实践例子

import sys
def divnum(a,b):
    c=a/b
    return c
try:
    print(divnum(2,0))
except:
    print(sys.exc_info())  ##1,
print(traceback.print_exc()) ##2
print(traceback.print_exception()) ##3,返回字符串
traceback.print_exc(file=open("test.txt","a+") ##4 若没有test.txt文件,则新建一个,写入调试信息,若存在,则在后面追加
exc_type,exc_value,exc_traceback=sys.exc_info
print(traceback.format_exception(exc_type,exc_value,exc_traceback)) ## 5
print(traceback.extract_tb(exc_traceback)) ## 6

#1 

(<class 'ZeroDivisionError'>, ZeroDivisionError('division by zero'), <traceback object at 0x0000000003928188>)

#2 

 

#3

 #5

['Traceback (most recent call last): ', '  File "D:/WorkSpace/untitled/1.py", line 20, in <module>     print(divnum(2,0)) ', '  File "D:/WorkSpace/untitled/1.py", line 17, in divnum     c=a/b ', 'ZeroDivisionError: division by zero ']

#6

[<FrameSummary file D:/WorkSpace/untitled/1.py, line 20 in <module>>, <FrameSummary file D:/WorkSpace/untitled/1.py, line 17 in divnum>]

原文地址:https://www.cnblogs.com/yuhuang/p/13268977.html