Ale*_*lex 3 python exception-handling try-catch
我有一个方法可以检查某些东西,哪些可以
我想正确地捕获异常以自己引发异常,但是如果测试返回False也是如此.这样做的错误方法是
try:
if not check():
raise MyException()
except:
raise MyException()
Run Code Online (Sandbox Code Playgroud)
因为第一次MyException被抓住except了.一种妥善处理这种方法的方法是
try:
flag = check()
except:
raise MyException()
else:
if not flag:
raise MyException()
Run Code Online (Sandbox Code Playgroud)
这是处理这种情况的唯一方法,还是有另一种方法可以更有效地处理它,摆脱flag变量?
你永远不应该使用except:因为它捕获所有异常,包括SystemExit,你应该做:
try:
if not check():
raise MyNewException()
except ExceptionRaisedByCheck:
raise MyNewException()
Run Code Online (Sandbox Code Playgroud)
如果来自check()的异常与您要引发的异常相同,则应更改该异常.
编辑:如果异常相同,你也可以这样做(Mark Byers在他的回答中有这个,但它现在已经消失了):
if not check():
raise TheSameException()
Run Code Online (Sandbox Code Playgroud)
这将传播异常,如果为False则会引发异常.