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

2024-04-25 19:54:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我是python新手,需要了解python在以下情况下是如何工作的:

func1(func2(param1, param2), expected_value)

在哪里

func1(param_x, expected):

如果参数x与预期一致,则返回true。这里param_x可能是func2引发的异常。我可能期望出现异常,并需要断言相同的异常。你知道吗

我的问题是:

如果func2引发异常,它的行为如何?你知道吗


Tags: true参数paramvalue情况断言param1expected
3条回答

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

如果没有受到伤害,它就会破坏脚本。你知道吗

重要的是要理解,在您的代码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)的lambda表达式。你知道吗

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

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)

如果这不是你要找的,告诉我。你知道吗

相关问题 更多 >