传递函数时的python错误处理';s响应作为另一个函数的参数
我是python新手,需要了解python在以下情况下如何异常工作:传递函数时的python错误处理';s响应作为另一个函数的参数,python,function,exception-handling,Python,Function,Exception Handling,我是python新手,需要了解python在以下情况下如何异常工作: func1(func2(param1, param2), expected_value) 在哪里 func1(param_x, expected): 如果参数x与预期一致,则返回true。这里,param_x可能是func2引发的异常。我可能期望出现异常,并且需要断言相同的异常 我的问题是: 如果func2引发异常,它的行为如何?取决于您希望它如何处理异常。查看试块。 如果未经处理,则会中断脚本。如果param_x是fu
func1(func2(param1, param2), expected_value)
在哪里
func1(param_x, expected):
如果参数x与预期一致,则返回true。这里,param_x可能是func2引发的异常。我可能期望出现异常,并且需要断言相同的异常
我的问题是:
如果
func2
引发异常,它的行为如何?取决于您希望它如何处理异常。查看试块。
如果未经处理,则会中断脚本。如果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)
如果这不是您要找的,请告诉我。重要的是要了解,在您的代码
func1(func2(param1,param2),期望值)
中,如果func2
引发异常,将永远不会调用func1
这是因为一个异常打破了Python语句的普通计算。当引发异常时,发生异常的语句将立即停止计算。除非该语句在try
块中,否则正在运行的函数也会立即停止,异常会冒泡到调用该函数的位置
如果希望
func1
捕获由func2
调用的异常,则需要让func1
执行func2
本身的调用。也就是说,func1
的参数不能只是func2
的返回值,必须以某种形式包含函数及其参数。这就是最简单形式的unittest.TestCase
方法的工作原理。传递一个可调用的参数和一组参数,以及期望引发的异常类型。另一个选项可能是传递一个已绑定了func2
参数的可调用零参数,例如functools.partial
实例或类似lambda:func2(param1,param2)
的lambda表达式,它只会中断脚本的执行。