如何返回值并引发异常

mis*_*ear 5 python exception-handling return exception systemexit

这个try/ except陈述有两个目标.

  1. return如果没有问题,它需要值为1,如果出现任何问题,则需要为0.
  2. 它需要引发异常并结束脚本.

return有价值的工作.我也有SystemExit()工作.但是在一起,他们没有工作.

我的Python脚本(相关):

except IOError:
    value_to_return = 0
    return value_to_return
    raise SystemExit("FOOBAR")
Run Code Online (Sandbox Code Playgroud)

有了它,它raise SystemExit("FOOBAR")完全忽略了这条线.我如何才能获得退货价值raise SystemExit("FOOBAR")呢?对某些人来说这可能是基本的,但实际上我遇到了很多困难.

use*_*ica 7

回归和提高是相互排斥的.

提升SystemExit将结束剧本.一些清理例程可以运行,如果调用者真的,真的想要,他们可以捕获SystemExit并取消它,但大多数情况下,你可以把它想象为停止执行.调用者永远不会有机会看到返回值或做任何有意义的事情.

返回意味着您希望脚本继续.继续可能意味着让调用者加注SystemExit,或者可能意味着忽略错误,或者它可能意味着其他东西.无论它意味着什么取决于你,因为你是编写代码的人.

最后,你确定你应该处理这个错误吗?仅捕获异常以将其变为系统关闭可能不是最有用的行为.它不是一种用户友好的方法来处理问题,它隐藏了从堆栈跟踪中获得的所有有用的调试信息.


Nat*_*cha 5

您可以使用调用后使用的“returning_value”参数引发错误。

\n

对您的问题的另一个Python式答案可能是利用引发中的错误参数,然后在您的调用中管理错误以获取值,将其从字符串转换并获得“return-ish”。

\n
def your_f():\n    try:\n      some_io_thingy_ok()\n      return 1\n    except IOError:\n        raise SystemExit("FOOBAR", 0)\n\ntry:\n    my_returning_value = your_f()\nexcept SystemExit as err:\n    my_returning_value = err.args[1]\n\n\nprint(my_returning_value)\n
Run Code Online (Sandbox Code Playgroud)\n

来自Python 3 文档

\n
\n

当异常发生时,它可能有一个关联的值,也称为异常\xe2\x80\x99s 参数。参数的存在和类型\n取决于异常类型。

\n

except 子句可以在异常名称之后指定一个变量。该变量绑定到异常实例,参数存储在instance.args 中。为了方便起见,异常实例定义了\n str (),因此可以直接打印参数,而不必引用.args。人们还可以在引发异常之前先实例化异常,然后根据需要向其添加任何属性。

\n
\n