TL; DR:モジュールがすべてのエラーを記録していない場合、どのような種類のエラーをキャッチしますか?モジュールがすべてのエラーを記録していない場合、どのエラーをキャッチしますか? (plistlib)
シナリオ:
私はplistlib
を使用してproperty listsのシリーズを読みしようとしています。私はファイルを制御できません。ファイルを読み込めなかった場合は、スキップします。
私の質問はどのようなエラーを捕まえるべきですか?
plistlib.readPlist
文書IOError
およびxml.parsers.expat.ExpatError
。
しかし、入力ファイルの不正な形式によっても少なくともIndexError
とAttributeError
が生成される可能性があります。これらは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の
'Exception:'または 'Exception as e:'を除いてはおそらく、未知の例外の型を扱う最も一般的な方法です。下記のようにSteveが示唆しています。もう1つのオプションは、except:を持って、exceptブロックでe = sys.exc_info()[0] 'を使って例外インスタンス[[1](https://wiki.python.org/ moin/HandlingExceptions)]。結果はかなり似ているはずです。 –
ありがとうございます。私はこれに対処するベストプラクティスを探していました。これは助けになった! – tombardey
もう一つのベストプラクティスは、ライブラリのソースコードをチェックアウトし、 'rsise'を検索して例外のインベントリを取得することです。 –