Python 无法捕获重写的 NameError

2024-02-06

你如何解释这一点:

这段代码应该覆盖 NameError 然后捕获它。

OldNameError = NameError
class NameError(OldNameError):
    pass

try:
    ccc
except NameError as e:
    print "hi"

不打印“嗨”。 相反,输出是:

Traceback (most recent call last):
  File "try.py", line 6, in <module>
    ccc
NameError: name 'ccc' is not defined

但是这段代码:

OldNameError = NameError
class NameError(OldNameError):
    pass

try:
    raise NameError("oo")
except NameError:
    print "hi"

给出我想要的输出:

hi

解释是什么?

Thanks!


当你写的时候except NameError,你是说你想捕获任何类型的异常NameError指的是你接球的那一刻。既然你改变了什么NameError是,你正在努力赶上新课。但提出的例外是“真实的”NameError,而不是您覆盖的那个。

如果修改 except 子句,您可以看到这一点:

try:
    ccc
except Exception as e:
    print isinstance(e, NameError)
    print isinstance(e, OldNameError)

输出是:

False
True

。 。 。表明引发的异常是 OldNameError,而不是新的 NameError。

您无法更改由于未定义的名称而引发的异常类型。你可以创造一些东西calledNameError,但除非您自己明确使用它(就像您在第二个示例中所做的那样),否则它永远不会被使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python 无法捕获重写的 NameError 的相关文章

随机推荐