我正在使用一个包(foo)并在该包中调用类(Foo)中的方法。让我们说套餐有自己的例外定义:
exception foo.exceptions.FooEx_1
exception foo.exceptions.FooEx_2
...
exception foo.exceptions.FooEx_n
我不想写一般的异常处理程序:
try:
except:
# Process any exception here
我只想捕获foo库/包中引发的异常。有没有办法做到这一点?像:
try:
except foo.exceptions.*
答案 0 :(得分:1)
如果foo.exceptions
中的所有异常都是某个基类foo.exceptions.BaseFooException
类的子类,则可以捕获它:
>>> assert issubclass(NotImplementedError, RuntimeError)
>>>
>>> try:
... raise NotImplementedError()
... except RuntimeError:
... print('Caught it')
...
Caught it
否则,您必须从模块中提取所有异常:
all_exceptions = tuple(getattr(foo.exceptions, e) for e in dir(foo.exceptions) if e.startswith('FooEx'))
过滤它们:
try:
...
except all_exceptions as e:
# We caught it