Python语句中的if-else子句

时间:2015-02-25 17:14:33

标签: python if-statement while-loop

我正在尝试检查几个函数的输出,如果没有错误,我转到下一个函数。 所以我添加了一个while循环和几个if语句来处理错误:

success = True
    while success:
        err, msg = function1()
        if not err:
            err, msg = function2()
            if not err:
                err, msg = function3()
                if not err:
                    err, msg = function4()
                else:
                    print msg
                    success = False
            else:
                print "function2 fails"
                sucess = False
        else:
            print "function1 fails"
            success = False

这是否是一种更好的方法来避免,否则,我如何为此目的重新设计代码?

2 个答案:

答案 0 :(得分:3)

一种相对简单的方法是创建一个函数列表并迭代它们:

functions = [function1, function2, function3, function4]
success = True
while success:
    for f in functions:
        err, msg = f()
        # If there's an error, print the message, print that the
        # function failed (f.__name__ returns the name of the function
        # as a string), set success to False (to break out of the while
        # loop), and break out of the for loop.
        if err:
            print msg
            print "{} failed".format(f.__name__)
            success = False
            break

我确信你可以更加花哨,并创建一个自定义迭代器等等(如果你的实际需求更复杂,这可能是一个更好的解决方案)。但这也应该有效。

如果您担心打印到STDERR而不是STDOUT,您还可以使用the warn function in the warnings module

答案 1 :(得分:1)

您可以尝试以下操作:

while True:
    for f in (function1, function2, function3, function4):
        err, msg = f()
        if err:
            print("%s failed, msg is %s" % (f.func_name, msg))
            break
    else:
        break

它按顺序执行每个功能。如果其中一个失败,则打印msg和函数名称,并打破for语句。当我们中断for时,else不会被执行。所以上述周期还有一次重复。

如果每个功能都成功运行,那么我们就不会中断并执行else for。这从while True开始,程序继续正常。