仅当try中的所有语句都没有失败时如何执行?

时间:2017-01-08 15:31:27

标签: python django django-models

try :
    doSomething1()
    doSomething2()
    doSomething3()
except Exception as e :
    doSomething4()
}  

我知道在上面的代码中如果doSomething1()失败doSomething2() & doSomething3()将无法执行,它会跳转到doSomething4()
但是我想要的是,如果doSomething1() or doSomething2() or doSomething2()中的任何一个失败,整个尝试都不会被执行并跳转到doSomething4()
实际上我正在使用数据库,在try我创建了两行,但有时第二行失败,第一行没有,但我不希望第二行在第二行失败时保存。我希望他们两个一起执行或失败。怎么样?

1 个答案:

答案 0 :(得分:0)

如果doSomething1doSomething2doSomething3方法中的任何一个失败,那么您希望跳过try块,doSomething4方法是运行

嗯,这在逻辑上是不可能的。如果doSomething1失败,那么它已被执行,因此不能再完全跳过整个trydoSomething2也是如此:如果失败,则表明它已经运行,doSomething1没有失败,因此只能跳过doSomething3

以下是您可以实施的一些不同行为。

行为1

try:
    doSomething1()
    doSomething2()
    doSomething3()
except:
    doSomething4()

尝试运行doSomething1doSomething2doSomething3。如果其中一个失败,则跳过以下内容,并执行doSomething4。否则,跳过doSomething4

行为2

try:
    doSomething1()
    doSomething2()
    doSomething3()
finally:
    doSomething4()

尝试运行doSomething1doSomething2doSomething3。如果其中一个失败,则跳过以下内容。在任何情况下,doSomething4都会在最后执行。

行为3

try:
    doSomething1()
except:
    try:
        doSomething2()
    except:
        pass
    else:
        try:
            doSomething3()
        except:
            pass
        else:
            doSomething4()
else:
    try:
        doSomething2()
    except:
        try:
            doSomething3()
        except:
            pass
        else:
            doSomething4()
    else:
        try:
            doSomething3()
        except:
            doSomething4()

如果doSomething1doSomething2doSomething3中只有一个失败,则会运行doSomething4。这种行为可以通过更简单的异常管理以更简单的方式实现,但此代码的优点是仅使用tryexceptelse

行为4

try:
    doSomething1()
    doSomething2()
    doSomething3()
    doSomething4()

这与您问题的标题相对应。如果doSomething1doSomething2doSomething3都没有失败,则doSomething4会运行;否则,它不会运行。