簡體   English   中英

如何使用try和except在python中捕獲函數失敗

[英]How to catch function fails in python with try and except

我在看文檔,嘗試try以及那里列出的內置值,但是我弄清楚了應該使用什么來捕獲一般功能失敗。 我的意思是說我有這些: foo.py

def create_apples(x,y,z):
    appleMaker = appleMaker()
    appleMaker.maker(x,y,z)
def create_bananas(x,y,z):
    bananaMaker = BananaMaker()
    bananaMaker.maker(x,y,z)

if __name__ == '__main__':

    x = 1
    y = 2
    z = 3
    create_apples(x, y, z)
    create_bananas(x, y, z)

使用appleMaker.py:

from random import randint

class appleMaker:
    def __init__(self):
        self.bushelID
        self.numberCreated

    def maker(x, y, z):
        self.bushelID = randint(0,9)
        self.numberCreated = x + y + z

和BananaMaker.py分別看起來與appleMaker.py完全相同。 我想要做的是在foo中,例如:

try:
    create_apple(x,y,z)
except Exception:
    print "informative information"
    sys.exit(1)

通常,您會閱讀有關create_apple()的文檔,以查看它會引發哪些異常並捕獲這些異常。

但是,與Java不同,Python函數不需要聲明它們可以引發的所有可能的異常,因此可以想象任何函數都可以引發許多不同的異常。

您最好的選擇可能是最后的某種綜合條件:

try:
    create_apple(x,y,z)

except NoTreeFound:
    print 'could not find an apple tree'

except BasketFull:
    print 'apple basket is already full of apples'

except Winter:
    print 'Cannot create apples in winter!'

except Exception as e:
    print 'an unknown error occurred, message is: %s' % str(e)

更新

您似乎正在尋找有關函數應如何引發異常的建議,而不是調用方應如何捕捉異常的建議。

如果您的函數可能以幾種不同的方式失敗,那么為每個失敗條件定義特定的異常對於調用者來說將很方便,因為它可以輕松地分別處理每個失敗條件(如我在上面的示例中所示)。

但是,如果您的函數實際上只能以一種方式失敗,並且在某些情況下其細節可能略有不同,那么最好的辦法是使用一條特定消息引發一個通用異常:

raise Exception("my coffee is too cold")

最后,這是一個設計決定。 兩種方式都可以。

暫無
暫無

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

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