我有一个方法可以检查一些东西
- 自己引发异常
- 返回真值
- 返回错误
我想正确地捕获异常以自己引发异常,但如果测试返回 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() 的异常与您要引发的异常相同,您应该更改它。
编辑:如果异常相同,您也可以简单地执行此操作(Mark Byers 在他的回答中有这个,但现在不见了):
if not check():
raise TheSameException()
这将传播异常或如果为 False 则引发。
关于在 try block 中引发错误的 pythonic 方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12724087/