有没有办法处理异常但只能从特定的库中处理?

时间:2018-03-23 23:25:38

标签: python python-2.7 exception-handling

我正在使用一个包(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.*

1 个答案:

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