我最近在编写Python程序时发现了一些奇怪的行为。我的情况如下:
try:
raise Exception("Meh!")
except Exception as e:
print e
if e:
print e
令我惊讶的是,这个印着“嗯!”两次,显示异常“e”仍然可以访问,即使try/except块已经结束。你知道吗
我的问题是,这是python的预期行为还是巧合。我能指望它一直起作用吗?还是这不是官方行为?你知道吗
我知道我可以添加另一个变量来捕获这个,比如:
my_exception = None
try:
raise Exception("Meh!")
except Exception as e:
print e
my_exception = e
if my_exception:
print my_exception
但如果第一个版本不被认为是黑客,我倾向于,因为这将意味着有更少的变量。你知道吗
顺便说一句,我使用的是python2.7.6。你知道吗
谢谢
Try/except块不会在Python中创建新的作用域,这就是为什么仍然可以在块之后使用
e
。(This answer有关于Python中作用域的更多信息。)但是,如果没有引发异常,
e
将永远不会被创建,因此您以后不能在没有UnboundLocalError
发生的情况下执行if e
。你知道吗相关问题 更多 >
编程相关推荐