Python异常的获取与处理

Posted 小黄鱼的圈子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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):\\n\', \'  File "D:/WorkSpace/untitled/1.py", line 20, in <module>\\n    print(divnum(2,0))\\n\', \'  File "D:/WorkSpace/untitled/1.py", line 17, in divnum\\n    c=a/b\\n\', \'ZeroDivisionError: division by zero\\n\']

#6

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

以上是关于Python异常的获取与处理的主要内容,如果未能解决你的问题,请参考以下文章

python函数与异常处理

python的异常处理

异常和TCP通讯

Python异常处理与程序调试

你如何在 python 中处理 graphql 查询和片段?

Python笔记:异常处理机制与 open()