Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
传递函数时的python错误处理';s响应作为另一个函数的参数_Python_Function_Exception Handling - Fatal编程技术网

传递函数时的python错误处理';s响应作为另一个函数的参数

传递函数时的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

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

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表达式,它只会中断脚本的执行。