我刚刚遇到了类似的事情。 except 中的as 的行为与预期不符:
#!/usr/bin/python3.6
exc = 'foofoo'
print('exc in locals?', 'exc' in locals())
try:
x = 1 / 0
except Exception as exc:
print('exc in locals?', 'exc' in locals())
print('Error', exc)
print('exc in locals?', 'exc' in locals())
print('Sorry, got an exception', exc)
这会产生以下输出。 NameError 表示exc 不再在locals() 中。
% ./g.py
exc in locals? True
exc in locals? True
Error division by zero
exc in locals? False
Traceback (most recent call last):
File "./g.py", line 11, in <module>
print('Sorry, got an exception', exc)
NameError: name 'exc' is not defined
%
as ex 将变量从作用域中移除。我还没有找到对此的解释。此代码产生预期的输出:
#!/usr/bin/python3.6
exc = 'foofoo'
print('exc in locals?', 'exc' in locals())
try:
x = 1 / 0
except Exception as exc_:
exc = str(exc_)
print('exc in locals?', 'exc' in locals())
print('Error, exc)
print('exc in locals?', 'exc' in locals())
print('Sorry, got an exception', exc)
这解释了观察到的行为:Python 3 try statement