對不起,對於我的問題來說,它似乎是最具描述性的。如何找到列表中給出的庫函數在Python中引發的所有異常?
基本上,我很難在官方的python文檔中找到異常信息。例如,在一個程序,我目前正在寫,我使用shutil libary的移動功能:
from shutil import move
move('somefile.txt', '/tmp/somefile.txt')
這工作得很好,只要我有到/ tmp /寫訪問,有足夠的磁盤空間,以及是否滿足所有其他要求。
然而,編寫通用的代碼時,往往很難保證這些因素,所以人們通常使用的例外:
from shutil import move
try:
move('somefile.txt', '/tmp/somefile.txt')
except:
print 'Move failed for some reason.'
我想實際上捕獲拋出,而不是僅僅抓住一切適當的例外,但我根本無法找到大多數python模塊拋出的異常列表。有沒有辦法讓我看看給定函數可以拋出哪些異常,爲什麼?這樣我可以做出適當的情況下,爲每個例外,如:
from shutil import move
try:
move('somefile.txt', '/tmp/somefile.txt')
except PermissionDenied:
print 'No permission.'
except DestinationDoesNotExist:
print "/tmp/ doesn't exist"
except NoDiskSpace:
print 'No diskspace available.'
答案要點去誰就可以聯繫我,我已經在官方文檔某種程度上忽視了一些相關的資料,或提供一個安全可靠找出究竟哪些異常是由哪些功能引發的,以及爲什麼。
謝謝!
UPDATE:從給出的答案看來,確實沒有一個100%直接的方法來確定哪些錯誤是由特定函數引發的。使用元編程,似乎我可以計算出簡單的案例並列出一些例外情況,但這不是一種特別有用或方便的方法。
我想最終會有一些標準來定義每個python函數引發哪些異常,並且這些信息將包含在官方文檔中。在此之前,我認爲我會允許這些例外通過,併爲我的用戶錯誤,因爲它似乎是最理智的事情。
作爲一個Python初學者,我不沒有經驗可以肯定地說,但是相當於Java的'throws'在測試它們類型的函數參數的方式(當你的函數可以處理任何duck-typed迭代)的時候感覺不太平常。 – msw 2010-05-17 19:25:20