我只想排除变异体抛出的异常。然而,在那里有很多可能的例外。有没有什么方法可以通配符(通过regexp/etc)由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
发布于 2012-05-07 13:30:40
还有一种不那么麻烦的方法,尽管这仍然是一种轻微的痛苦,但每个模块都实现了一个“错误”,所有相关的错误都是从这个“错误”扩展而来的。
# 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-07 13:42:52
这也相当难看,但在需要截取大量、非常异构的异常集的情况下,这样的东西可能是一个可行的选择。至少它隔离了其他地方的长长的异常列表。
>>> 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的解决方案可能更可取。
https://stackoverflow.com/questions/10477066
复制相似问题