3

我只想排除诱变剂引发的异常。但是,那里有很多可能的例外。有什么方法可以通配符(通过正则表达式/等)由except处理的异常?替代方案只是丑陋...

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 回答