Python - 如何捕获方法内部的异常

时间:2010-05-06 21:35:12

标签: python exception

我想知道是否有办法在被调用的方法中捕获异常。

示例:

def foo(value):
    print value

foo(x)

这将抛出NameError异常,因为未声明x。 我想在foo方法中捕获这个NameError异常。 有办法吗?

2 个答案:

答案 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()