Python无法捕获重写的NameError
作者:互联网
您如何解释呢?
该代码应该重写NameError然后捕获它.
OldNameError = NameError
class NameError(OldNameError):
pass
try:
ccc
except NameError as e:
print "hi"
不打印“ 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
有什么解释?
谢谢!
解决方法:
当您编写除NameError之外的代码时,是说您要捕获执行捕获时NameError所指类型的异常.由于更改了NameError是什么,因此您尝试捕获新的类.但是引发的异常是“真实的” NameError,而不是您覆盖的错误.
如果修改except子句,则可以看到以下内容:
try:
ccc
except Exception as e:
print isinstance(e, NameError)
print isinstance(e, OldNameError)
输出为:
False
True
. . .指示引发的异常是OldNameError,而不是新的NameError.
您无法更改由于名称未定义而引发的异常类型.您可以创建一个叫做NameError的东西,但是除非您自己明确使用它,否则它将永远不会被使用(就像您在第二个示例中所做的那样).
标签:nameerror,exception,override,python 来源: https://codeday.me/bug/20191122/2057107.html