将函数的响应作为参数传递给另一个函数时的python错误处理

时间:2014-06-09 04:46:47

标签: python function exception-handling

我是python的新手,需要了解python在以下情况下如何处理异常:

func1(func2(param1, param2), expected_value)

其中

func1(param_x, expected):
如果param_x符合预期,则

返回true。这里param_x可能是func2引发的异常。我可能期待异常并需要断言相同。

我的问题是:

如果func2引发异常,它的表现如何?

3 个答案:

答案 0 :(得分:0)

如果param_x是func2 返回的异常,那么你可以简单地检查func1中param_x的值(例如,param_x == NameError)。如果param_x是由func2 引发的异常,那么程序将打印一个描述错误发生在func2中的位置的回溯。如果您想在后一种情况下处理错误,我建议在func1调用之外设置func2的返回值,并将其包装在try(块除外)中。例如,

try:
    param_x = func2(param1, param2)
except NameError:
    param_x = new_val
func1(param_x, expected_value)

如果您想将引发的错误作为参数传递给func1,您可以尝试类似:

try:
    param_x = func2(param1, param2)
except NameError:
    param_x = NameError
except AnotherError:
    param_x = AnotherError
except:
    print "UNEXPECTED ERROR"
    raise
func1(param_x, expected_value)

如果这不是你想要的,请告诉我。

答案 1 :(得分:0)

了解在代码func1(func2(param1, param2), expected_value)中,如果func2引发异常,则永远不会调用func1,这一点非常重要。

那是因为异常突破了Python语句的普通评估。引发异常时,发生该异常的语句将立即停止评估。除非该语句在try块内,否则正在运行的函数也会立即停止,并且异常会冒泡到调用该函数的位置。

如果您希望func1捕获func2调用的异常,则需要让func1自己调用func2。也就是说,func1的参数只能是func2的返回值,但必须以某种形式包含函数及其参数。这就是unittest.TestCase func2方法的最简单形式。您传递一个可调用的参数和一组参数,以及您希望引发的异常类型。另一种选择可能是传递一个零参数可调用,该调用具有functools.partial个已经绑定的参数,例如lambda: func2(param1, param2)实例或像{{1}}这样的lambda表达式。

答案 2 :(得分:-1)

取决于您希望它如何处理异常。查看try-except块。 https://docs.python.org/2/tutorial/errors.html

如果没有处理,则会破坏脚本。