Python:尝试…除了对异常名称使用通配符之外?

2024-10-01 00:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想排除诱变剂引发的异常。然而,有很多可能的例外。有没有什么方法可以通配符(通过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


Tags: 方法etcid3regexpkeyerrorvalueerrorexcept通配符
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的解决方案在您的特定情况下可能更可取。不过,我想我应该提一下。在

还有一种不那么复杂的方法,尽管这仍然有点痛苦,但是每个模块都实现了一个“错误”,所有相关错误都是从这个错误中扩展出来的。在

# 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

相关问题 更多 >