try except Exception as e 检查异常

简单来说

这个e是异常类的一个实例,如果我们完整地解释这个问题,我觉得还是从Python的自定义异常类说起比较好。

假如,我们现在自定义一个简单的异常类:

>>> class MyError(Exception):
...     def __init__(self,value):
...             self.value = value
...     def __str__(self):
...             return repr(self.value)
... 

我们抛这个异常的时候可以这么写:

>>> try:
...     raise MyError(2*2)
... except MyError as e:
...     print('My exception occurred, value:',e.value)
... 
My exception occurred, value: 4

我们在捕获这个异常之后假如需要访问TA的一些属性怎么办,这个时候就可以使用as关键字

所以,这里的 e 是前面 MyError 类的一个实例,我们可以直接访问他的 value,也就是你看到的 e.value

还可以这样

try…except…监测一段代码,想要准确的定位错误类型与错误明细

举个栗子,我们想要找到列表a的第四个值,然而其实并不存在…【越界错误 IndexError

写成’except Exception as e’的形式

这时候,代码只要写成下面这样就好了:

a = [1,2,3]
 
try:
    a[3]
except Exception as e:
    print('错误类型是',e.__class__.__name__)
    print('错误明细是',e)

随后你会发现输出结果如下:

错误类型是 IndexError
错误明细是 list index out of range

这样就准确返回了错误类型和错误明细

高端操作

trace模块的traceback函数

使用traceback函数打印错误

a = [1,2,3]
 
try:
    a[3]
except Exception as e:
    traceback.print_exc()

输出报错信息如下:

Traceback (most recent call last):
  File "<ipython-input-45-d04851f889bb>", line 4, in <module>
    a[3]
IndexError: list index out of range

可见,错误的信息更加详细。精准定位了:错误行,错误位置及错误明细。

另外指定位置可以将错误信息打印出来:

a = [1,2,3]
 
try:
    a[3]
except Exception as e:
    traceback.print_exc(file = open('E:/coding/errorlog_abc.txt','a'))

则console不会再显示,结果会出现在指定的文件中

在这里插入图片描述

与重定向结合使用,参考文章

发布了64 篇原创文章 · 获赞 6 · 访问量 5545

猜你喜欢

转载自blog.csdn.net/weixin_45494811/article/details/104216997