我想知道是否有办法在被调用的方法中捕获异常。
示例:
def foo(value):
print value
foo(x)
这将抛出NameError异常,因为未声明x。 我想在foo方法中捕获这个NameError异常。 有办法吗?
答案 0 :(得分:9)
尝试评估NameError
时发生x
。永远不会输入foo
,因此您无法抓住NameError
内的foo
。
我认为你的想法是,当你foo(x)
时,输入foo
,然后查找x
。您想说,“我不知道x
是什么”,而不是让NameError
被提升。
不幸的是(对于你想要做的事情),Python几乎与其他所有编程语言一样,在传递给函数之前对其参数进行求值。无法停止从 NameError
内的传递到foo
的值foo
。
答案 1 :(得分:1)
不完全正确,但有一种方法可以捕获未处理的每个异常:
>>> import sys
>>>
>>> def handler(type, value, traceback):
>>> print "Blocked:", value
>>> sys.excepthook = handler
>>>
>>> def foo(value):
>>> print value
>>>
>>> foo(x)
Blocked: name 'x' is not defined
不幸的是,sys.excepthook
仅被称为“just before the program exits”,因此您无法将控制权返回给您的计划,更不用说将例外插入foo()
。