Python:尝试...除了通配符外的异常名称?

时间:2012-05-07 05:25:49

标签: python exception-handling

我想除了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

2 个答案:

答案 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的解决方案可能更可取。不过,我以为我会提到它。