python3中异常处理_Python3中异常处理常用的三种方法 ...

本文介绍了在Python中如何有效地处理异常并记录日志的方法。通过三种方式实现:一是使用try-except捕获所有异常并打印;二是利用sys模块的exc_info()获取异常详细信息;三是运用traceback模块进行更深入的异常追踪。
摘要由CSDN通过智能技术生成

一般我们我们想捕获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)

结果为:

: name 'w' is not defined

方法二:采用sys模块回溯最后的异常sys.exc_info() 会返回一个3值元表,其中包含调用该命令时捕获的异常。这个元表的内容为 (type, value, traceback) ,其中:

type 从获取到的异常中得到类型名称,它是BaseException 的子类;

value 是捕获到的异常实例;

traceback 是一个 traceback 对象,下面会详述。

import sys

try:

w = abs(-1)

list.append(w)

except:

info = sys.exc_info()

print(info[0], ":", info[1])

# 结果如下:

: descriptor 'append' requires a 'list' object but received a 'int'

sys.last_traceback 包含的内容与 sys.exc_info() 相同,但它主要用于调试,并不总是被定义。三、采用traceback模块查看异常trackback 模块用来精确模仿 python3 解析器的 stack trace 行为。在程序中应该尽量使用这个模块。traceback.print_exc() 可以直接打印当前的异常。

import traceback

try:

raise

except:

traceback.print_exc()

traceback.print_tb() 用来打印上面提到的 trackback 对象。

import sys,traceback

try:

raise

except:

t,v,tb = sys.exc_info()

traceback.print_tb(tb)

traceback.print_exception() 可以直接打印 sys.exc_info()提供的元表。

import sys,traceback

try:

raise

except:

traceback.print_exception(*sys.exc_info())

其实,下面两句是等价的:

traceback.print_exc()

traceback.print_exception(*sys.exc_info())

traceback 提供的参数可以将 print 的内容写入到文件中

import traceback

try:

a=b

b=c

except:

f=open("log.txt",'a')

traceback.print_exc(file=f)

f.flush()

f.close()

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

郭德纲

坚持分享的人最可爱,转起!

我为开源技术社区「带盐」,每天收获一小点,快乐生活一整天!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值