【问题标题】:python error handling while passing a function's response as parameter to another function将函数的响应作为参数传递给另一个函数时的python错误处理
【发布时间】:2014-06-09 04:46:46
【问题描述】:

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

func1(func2(param1, param2), expected_value)

在哪里

func1(param_x, expected):

如果 param_x 符合预期,则返回 true。这里的 param_x 可能是 func2 引发的异常。我可能期待异常并且需要断言相同。

我的问题是:

如果func2 引发异常,它的行为如何?

【问题讨论】:

  • 它只会中断脚本的执行。

标签: python function exception-handling


【解决方案1】:

如果 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)

如果这不是您要找的,请告诉我。

【讨论】:

    【解决方案2】:

    请务必了解,在您的代码 func1(func2(param1, param2), expected_value) 中,如果 func2 引发异常,则永远不会调用 func1

    这是因为 Python 语句的普通求值过程中出现异常。当引发异常时,发生异常的语句将立即停止评估。除非该语句在 try 块中,否则正在运行的函数也会立即停止,并且异常会冒泡到调用函数的位置。

    如果你想让func1 捕获func2 调用的异常,你需要让func1 自己调用func2。也就是说,func1 的参数不能只是func2 的返回值,而是必须以某种形式包含函数及其参数。这就是unittest.TestCaseassertRaises 方法以最简单的形式工作的方式。您传递一个可调用的和一组参数,以及您希望引发的异常类型。另一种选择可能是传递已绑定 func2 的参数的零参数可调用对象,例如 functools.partial 实例或 lambda: func2(param1, param2) 等 lambda 表达式。

    【讨论】:

      【解决方案3】:

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

      如果不加处理,它会破坏脚本。

      【讨论】:

        猜你喜欢
        • 2013-11-19
        • 1970-01-01
        • 2017-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多