庫的行爲是否有一個圖書館應該如何表現任何標準的做法,某些模塊時,無法導入?它是否應該讓一個異常飛行,或者它應該抓住它並且用適當的信息優雅地退出?蟒蛇:對失敗的導入
例如,我有這樣的事情:
try:
from argparse import ArgumentParser
except ImportError:
print('fathom library requires python 3.2 or argparse package.')
它是好還是壞?
庫的行爲是否有一個圖書館應該如何表現任何標準的做法,某些模塊時,無法導入?它是否應該讓一個異常飛行,或者它應該抓住它並且用適當的信息優雅地退出?蟒蛇:對失敗的導入
例如,我有這樣的事情:
try:
from argparse import ArgumentParser
except ImportError:
print('fathom library requires python 3.2 or argparse package.')
它是好還是壞?
庫應該總是引發ImportError
不是退出的;該程序可能需要有條件地包含它(也許在它不可用時替換它)。
如果下級模塊提高ImportError
,你最好的拍攝是安裝額外的信息來重新提出。
如果可以,分發帶有封裝的模塊,然後按照這個模式你使用哪一種選擇(更喜歡Python的3.x的一個,默認爲您發貨之一)。
如果不是,這是一般沒關係,只要你也要確保這不會默默導致更晦澀異常以後(即,確保您清除在except
的結束,在所有的可能性,要麼重新 - 拋出這個異常或拋出你自己的)。
PS - This wasn't an uncommon occurrence for simplejson
before it got included in Python proper as well
這是一個不錯的主意。我將'argparse'軟件包作爲後備資源加入到我的庫中。謝謝。 – gruszczy 2011-04-11 21:21:34
其口味的問題。儘管我喜歡你的方法。它清晰而乾淨。
你的第一段很混亂。在各2例(A嘗試導入B,和A嘗試導入B的嘗試導入C),請說是「一庫」,「程序」和「它」。最合理的解釋是A ==程序,B ==庫,C ==它......但「它」沒有指稱。 – 2011-04-11 23:47:03