TL; DR:當模塊沒有記錄所有錯誤時要捕捉哪種錯誤?模塊沒有記錄其所有錯誤時要捕捉哪些錯誤? (plistlib)
方案:
我試圖讀取使用plistlib
一系列property lists。我無法控制這些文件。如果文件無法讀取,我想跳過它。
我的問題是什麼樣的錯誤,我應該追上?
plistlib.readPlist
文件IOError
和xml.parsers.expat.ExpatError
。
但我也可以生成至少IndexError
和AttributeError
只是通過malforming我的輸入文件。這些沒有記錄在plistlib
。誰知道其他隨機輸入文件可能產生哪種附加錯誤?我不希望我的程序因此而失敗。
所以我的問題是。我應該抓住什麼?我的理解是,使用通用except
捕獲任何錯誤不是首選,因爲它掩蓋了其他錯誤,如KeyboardInterrupt
。由於這是一個命令行應用程序,我不想忽略這些事件。
代碼:
import plistlib
import sys
def main():
paths = [] # from sys.argv
for path in paths:
try:
plist = plistlib.readPlist(path)
except: # What to catch here?
sys.stderr.write('Couldnt read plist. Ignoring.')
continue
process(plist)
的Python 2.7,OS X.
'除例外:'或'除非例外爲e:'可能是最常見的方式來處理未知異常類型,史蒂夫如下建議。另一個選擇是隻有一個'except:',然後在except塊中使用'e = sys.exc_info()[0]'來檢索異常實例[[1](https://wiki.python.org/)莫因/ HandlingExceptions)]。我想結果應該非常相似。 –
謝謝。我正在尋找最佳做法來處理這個問題。這有幫助! – tombardey
另一個最佳做法是簽出庫的源代碼並搜索'rsise'來清除異常。 –