3

変異原によってスローされた例外のみを除外したい。ただし、そこには考えられる例外がたくさんあります。except によって処理される例外を (regexp/etc 経由で) ワイルドカード化できる方法はありますか? 代替案はただ醜いです...

mutagen.apev2.APEBadItemError
mutagen.apev2.APENoHeaderError
mutagen.apev2.KeyError
mutagen.apev2.ValueError
mutagen.easyid3.EasyID3KeyError
mutagen.easyid3.KeyError
mutagen.easyid3.ValueError
mutagen.flac.FLACNoHeaderError
mutagen.flac.FLACVorbisError
mutagen.flac.TypeError
mutagen.id3.EnvironmentError
mutagen.id3.EOFError
mutagen.id3.ID3BadCompressedData
mutagen.id3.ID3BadUnsynchData

など:P

4

2 に答える 2

4

少し面倒ですが、これらのモジュールのそれぞれは、関連するすべてのエラーの拡張元である「エラー」を実装しています。

# Please note, the exception class truly is lower cased as indicated
mutagen.id3.error
mutagen.flac.error
mutagen.apev2.error

# mutagen.easyid3 errors extend the mutagen.id3.error class
于 2012-05-07T05:30:39.973 に答える
2

これもかなり醜いですが、大規模で非常に異種の例外セットをインターセプトする必要がある場合には、実行可能なオプションになる可能性があります。少なくとも、例外の長いリストを他の場所に隔離します。

>>> errors = {NameError:'a', ValueError:'b'}
>>> try:
...     cornucopia
... except Exception as e:
...     e_type = type(e)
...     if e_type in errors:
...         print errors[e_type]
...     else:
...         raise
... 
a

明らかに、これは可能であれば避けるべきです。特定のケースでは、 Bryan Moylesのソリューションがおそらく望ましいでしょう。それでも、私はそれについて言及したいと思いました。

于 2012-05-07T05:42:52.323 に答える