Python3中异常处理常用的三种方法
一般我们我们想捕获python的异常写入到log,做处理的话,一般用try语句来做处理,大概语法如下:
try: 语句1 语句2 . . 语句N except ........ : do something .......但是你并不知道"语句1至语句N"哪个会出现什么样的错误,但你还要做异常处理,且想把出现的异常打印出来,并不停止程序的运行,所以在"except ......"语句就起作用了。 方法一:捕获所有异常
Python2如下: try: 语句1 语句2 ..... 语句N except Exception,e: print Exception,":",e Python3如下: try: 语句1 语句2 ..... 语句N except Exception as e: print(Exception, ":", e)例子如下:
try: a = 1 b = a c = w except Exception as e: print(Exception, ":", e) 结果为:方法二:采用sys模块回溯最后的异常 sys.exc_info() 会返回一个3值元表,其中包含调用该命令时捕获的异常。 这个元表的内容为 (type, value, traceback) ,其中:: name 'w' is not defined
- type 从获取到的异常中得到类型名称,它是BaseException 的子类;
- value 是捕获到的异常实例;
- traceback 是一个 traceback 对象,下面会详述。
import systry: w = abs(-1) list.append(w)except: info = sys.exc_info() print(info[0], ":", info[1]) # 结果如下:sys.last_traceback 包含的内容与 sys.exc_info() 相同,但它主要用于调试,并不总是被定义。 三、采用traceback模块查看异常trackback 模块用来精确模仿 python3 解析器的 stack trace 行为。在程序中应该尽量使用这个模块。traceback.print_exc() 可以直接打印当前的异常。: descriptor 'append' requires a 'list' object but received a 'int'
import tracebacktry: raiseexcept: traceback.print_exc()traceback.print_tb() 用来打印上面提到的 trackback 对象。
import sys,tracebacktry: raiseexcept: t,v,tb = sys.exc_info() traceback.print_tb(tb)traceback.print_exception() 可以直接打印 sys.exc_info()提供的元表。
import sys,tracebacktry: raiseexcept: traceback.print_exception(*sys.exc_info())其实,下面两句是等价的:
- traceback.print_exc()
- traceback.print_exception(*sys.exc_info())
import traceback try: a=b b=c except: f=open("log.txt",'a') traceback.print_exc(file=f) f.flush() f.close()参考: https://docs.python.org/3/library/traceback.html?highlight=print_tb#traceback.print_exc https://docs.python.org/3/tutorial/errors.html