繁体   English   中英

Python 2和3中捕获的异常实例的范围

[英]Scope of caught exception instance in Python 2 and 3

因为Python中的变量可以在它们的循环之外访问并try - except块,我天真地认为下面的这段代码片段可以正常工作,因为e可以访问:

try:
    int('s')
except ValueError as e:
    pass
print(e)

在Python 2(2.7测试)中,它确实按预期工作,输出为:

invalid literal for int() with base 10: 's'

但是,在Python 3中,我很惊讶输出是:

NameError: name 'e' is not defined

为什么是这样?

我后来找到了答案,因为PEP 3110解释说,在Python 3中,在except套件的末尾删除了被捕获的名称,以实现更高效的垃圾回收。 如果您希望避免这种情况,还有推荐的语法:

有必要将异常实例保留在除套件末尾之外的情况可以像这样轻松转换

 try: ... except E as N: ... ... 

 try: ... except E as N: n = N ... … 

这样,当在块的末尾删除N时,n将保持并且可以正常使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM