我想除了mutagen抛出的异常外。但是,那里有很多可能的例外。有没有什么方法可以通配符(通过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
答案 0 :(得分: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
答案 1 :(得分: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的解决方案可能更可取。不过,我以为我会提到它。