简单来说
这个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不会再显示,结果会出现在指定的文件中
与重定向结合使用,参考文章