Python异常离开本地范围?

2024-09-25 16:20:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近在编写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。你知道吗

谢谢


Tags: 程序版本noneif官方myasexception
1条回答
网友
1楼 · 发布于 2024-09-25 16:20:40

Try/except块不会在Python中创建新的作用域,这就是为什么仍然可以在块之后使用e。(This answer有关于Python中作用域的更多信息。)

但是,如果没有引发异常,e将永远不会被创建,因此您以后不能在没有UnboundLocalError发生的情况下执行if e。你知道吗

相关问题 更多 >