2011-04-11 95 views
1

庫的行爲是否有一個圖書館應該如何表現任何標準的做法,某些模塊時,無法導入?它是否應該讓一個異常飛行,或者它應該抓住它並且用適當的信息優雅地退出?蟒蛇:對失敗的導入

例如,我有這樣的事情:

try: 
    from argparse import ArgumentParser 
except ImportError: 
    print('fathom library requires python 3.2 or argparse package.') 

它是好還是壞?

回答

4

庫應該總是引發ImportError不是退出的;該程序可能需要有條件地包含它(也許在它不可用時替換它)。

如果下級模塊提高ImportError,你最好的拍攝是安裝額外的信息來重新提出。

+0

你的第一段很混亂。在各2例(A嘗試導入B,和A嘗試導入B的嘗試導入C),請說是「一庫」,「程序」和「它」。最合理的解釋是A ==程序,B ==庫,C ==它......但「它」沒有指稱。 – 2011-04-11 23:47:03

2

如果可以,分發帶有封裝的模塊,然後按照這個模式你使用哪一種選擇(更喜歡Python的3.x的一個,默認爲您發貨之一)。

如果不是,這是一般沒關係,只要你也要確保這不會默默導致更晦澀異常以後(即,確保您清除在except的結束,在所有的可能性,要麼重新 - 拋出這個異常或拋出你自己的)。

PS - This wasn't an uncommon occurrence for simplejson before it got included in Python proper as well

+0

這是一個不錯的主意。我將'argparse'軟件包作爲後備資源加入到我的庫中。謝謝。 – gruszczy 2011-04-11 21:21:34

0

其口味的問題。儘管我喜歡你的方法。它清晰而乾淨。