【问题标题】:Python exceptions leaving local scope?Python异常离开本地范围?
【发布时间】:2015-03-18 15:38:42
【问题描述】:

我最近在编写 Python 程序时发现了一些奇怪的行为。我的情况如下:

try:
    raise Exception("Meh!")
except Exception as e:
    print e

if e:
    print e

令我惊讶的是,这会打印出“Meh!”两次,表明仍然可以访问异常“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

但如果第一个版本不被认为是 hack,我倾向于,因为这意味着变量更少。

顺便说一句。我正在使用 python 2.7.6。

谢谢

【问题讨论】:

  • 我不会认为它是重复的,因为链接的问题是关于 try 中的变量分配,但答案没有解决受 except 子句约束的名称,它可能略有不同。

标签: python variables exception scope


【解决方案1】:

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

但是,如果未引发异常,则永远不会创建 e,因此您以后不能在不出现 UnboundLocalError 的情况下执行 if e

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-08
    • 2016-01-14
    • 1970-01-01
    • 2012-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多