簡體   English   中英

Python語句中的if-else子句

[英]If-else clause in Python Statement

我正在嘗試檢查幾個函數的輸出,如果沒有錯誤,請轉到下一個函數。 因此,我添加了一個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

是否可以避免這種情況的更好方法,我該如何重新設計代碼?

一個相對簡單的方法是創建函數列表並對其進行迭代:

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,則還可以使用warnings模塊中的warn功能

您可以嘗試以下方法:

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不執行。 因此,以上循環又重復了一次。

如果每個函數都成功運行,那么我們就不會中斷, forelse將被執行。 while True中斷,程序正常繼續。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM