Python 2和3中捕获的异常实例的范围
由于在Python中,变量可以在循环之外访问,并且除了块之外,Python 2和3中捕获的异常实例的范围,python,python-2.7,python-3.x,exception,scope,Python,Python 2.7,Python 3.x,Exception,Scope,由于在Python中,变量可以在循环之外访问,并且除了块之外,try-,我天真地认为下面的代码片段可以很好地工作,因为e可以访问: try: int('s') except ValueError as e: pass print(e) 在Python2(2.7测试版)中,它确实按照我的预期工作,输出如下: invalid literal for int() with base 10: 's' NameError: name 'e' is not defined 然而,在Py
try
-,我天真地认为下面的代码片段可以很好地工作,因为e
可以访问:
try:
int('s')
except ValueError as e:
pass
print(e)
在Python2(2.7测试版)中,它确实按照我的预期工作,输出如下:
invalid literal for int() with base 10: 's'
NameError: name 'e' is not defined
然而,在Python 3中,我惊讶地发现输出是:
invalid literal for int() with base 10: 's'
NameError: name 'e' is not defined
这是为什么?我后来找到了一个答案,解释说在Python 3中,捕获的名称在套件的末尾被删除,除了之外,以实现更高效的垃圾收集。如果希望避免出现这种情况,还建议使用以下语法:
需要保留异常实例的情况
除了组曲的结尾外,可以很容易地这样翻译
try:
...
except E as N:
...
...
变成
try:
...
except E as N:
n = N
...
…
这样,当在块末尾删除N时,N将保持不变
可以正常使用