Python - 如何捕捉方法内部的异常
我想知道是否有办法在被调用的方法中捕获异常。Python - 如何捕捉方法内部的异常
例子:
def foo(value):
print value
foo(x)
这将抛出一个NameError异常,因为X没有宣布。 我想在foo方法中捕获这个NameError异常。 有没有办法?
不完全是,但有一个办法赶上每异常不被处理:
>>> 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()
。
是的,这不完全是,但我会试着弄清楚这件事。谢谢。 – 2010-05-07 14:54:24
当试图对x
进行评估时,发生NameError
。 foo
永远不会输入,因此您无法在foo
内找到NameError
。
我想你认为是,当你做foo(x)
,foo
输入,然后x
正在抬头。你想说,“我不知道x
是什么”,而不是让NameError
得到提高。
不幸的是(对于你想做的事情),Python和其他几乎所有的编程语言一样,在它们传递给函数之前评估它的参数。没有办法阻止从传入foo
的值NameError
内部foo
。
对不起,我改变了。这是因为我写了方法名称'方法',但后来改了名字。 – 2010-05-06 21:39:53
@加布里埃尔:它没有区别。在输入方法之前仍然评估“x”。你可以做'argument = x; foo(参数)'这几乎是等价的,但是当然'NameError'只会更快提出,尽管仍然在方法之外。 – 2010-05-06 21:45:05
这几乎没有道理。你想做什么? – 2010-05-06 22:01:27