我有一种方法可以检查某些内容并且可以
我想正确捕获异常以自己引发异常,但也希望测试返回 False。不正确的方法是
try:
if not check():
raise MyException()
except:
raise MyException()
因为第一个
MyException
在 except
之后再次被捕获。正确处理此问题的一种方法是try:
flag = check()
except:
raise MyException()
else:
if not flag:
raise MyException()
这是处理这种情况的唯一方法,还是有另一种更有效的方法来处理它,摆脱
flag
变量? 最佳答案
您永远不应该使用 except: 因为它会捕获所有异常,包括 SystemExit,您可能应该这样做:
try:
if not check():
raise MyNewException()
except ExceptionRaisedByCheck:
raise MyNewException()
如果来自 check() 的异常与您想要引发的异常相同,您应该更改它。
编辑:如果异常是相同的,你也可以简单地这样做(马克拜尔斯在他的回答中有这个,但现在已经消失了):
if not check():
raise TheSameException()
如果为 False,这将传播异常或引发。
关于在try块中引发错误的pythonic方式,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12724087/