我有一种方法可以检查某些内容并且可以

  • 本身引发异常
  • 返回真
  • 返回假

  • 我想正确捕获异常以自己引发异常,但也希望测试返回 False。不正确的方法是
    try:
        if not check():
            raise MyException()
    except:
        raise MyException()
    

    因为第一个 MyExceptionexcept 之后再次被捕获。正确处理此问题的一种方法是
    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/

    10-12 17:18