pythonic在try块中引发错误的方法

Ale*_*lex 3 python exception-handling try-catch

我有一个方法可以检查某些东西,哪些可以

  • 提出异常本身
  • 返回True
  • 返回False

我想正确地捕获异常以自己引发异常,但是如果测试返回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变量?

Seb*_*ask 7

你永远不应该使用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则会引发异常.