你如何解释这一点:
这段代码应该覆盖 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(使用前将#替换为@)