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

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

问题描述:

我想知道是否有办法在被调用的方法中捕获异常。Python - 如何捕捉方法内部的异常

例子:

def foo(value): 
    print value 

foo(x) 

这将抛出一个NameError异常,因为X没有宣布。 我想在foo方法中捕获这个NameError异常。 有没有办法?

+0

这几乎没有道理。你想做什么? – 2010-05-06 22:01:27

不完全是,但有一个办法赶上异常不被处理:

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

+0

是的,这不完全是,但我会试着弄清楚这件事。谢谢。 – 2010-05-07 14:54:24

当试图对x进行评估时,发生NameErrorfoo永远不会输入,因此您无法在foo内找到NameError

我想你认为是,当你做foo(x)foo输入,然后x正在抬头。你想说,“我不知道x是什么”,而不是让NameError得到提高。

不幸的是(对于你想做的事情),Python和其他几乎所有的编程语言一样,在它们传递给函数之前评估它的参数。没有办法阻止从传入foo的值NameError内部foo

+0

对不起,我改变了。这是因为我写了方法名称'方法',但后来改了名字。 – 2010-05-06 21:39:53

+3

@加布里埃尔:它没有区别。在输入方法之前仍然评估“x”。你可以做'argument = x; foo(参数)'这几乎是等价的,但是当然'NameError'只会更快提出,尽管仍然在方法之外。 – 2010-05-06 21:45:05