mis*_*ear 5 python exception-handling return exception systemexit
这个try/ except陈述有两个目标.
return如果没有问题,它需要值为1,如果出现任何问题,则需要为0.我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")呢?对某些人来说这可能是基本的,但实际上我遇到了很多困难.
回归和提高是相互排斥的.
提升SystemExit将结束剧本.一些清理例程可以运行,如果调用者真的,真的想要,他们可以捕获SystemExit并取消它,但大多数情况下,你可以把它想象为停止执行.调用者永远不会有机会看到返回值或做任何有意义的事情.
返回意味着您希望脚本继续.继续可能意味着让调用者加注SystemExit,或者可能意味着忽略错误,或者它可能意味着其他东西.无论它意味着什么取决于你,因为你是编写代码的人.
最后,你确定你应该处理这个错误吗?仅捕获异常以将其变为系统关闭可能不是最有用的行为.它不是一种用户友好的方法来处理问题,它隐藏了从堆栈跟踪中获得的所有有用的调试信息.
您可以使用调用后使用的“returning_value”参数引发错误。
\n对您的问题的另一个Python式答案可能是利用引发中的错误参数,然后在您的调用中管理错误以获取值,将其从字符串转换并获得“return-ish”。
\ndef 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)\nRun Code Online (Sandbox Code Playgroud)\n来自Python 3 文档:
\n\n\n当异常发生时,它可能有一个关联的值,也称为异常\xe2\x80\x99s 参数。参数的存在和类型\n取决于异常类型。
\nexcept 子句可以在异常名称之后指定一个变量。该变量绑定到异常实例,参数存储在instance.args 中。为了方便起见,异常实例定义了\n str (),因此可以直接打印参数,而不必引用.args。人们还可以在引发异常之前先实例化异常,然后根据需要向其添加任何属性。
\n