У меня есть простая система плагинов, упрощенная форма ниже. Идея состоит в том, что плагины будут реализовывать абстрактный класс и могут вызывать исключение для разрыва сигнала.
# my_plugin.py
import my_app
class MyPlugin(my_app.MyPluginBase):
def start(self):
raise my_app.MyLibException()
# my_app.py
import abc
import importlib
class MyLibException(Exception):
pass
class MyPluginBase(abc.ABC):
@abc.abstractmethod
def start(self):
pass
def main():
module = importlib.import_module('my_plugin')
klass = getattr(module, 'MyPlugin')
try:
app = klass()
app.start()
except MyLibException as e:
print('ok')
print(e.__class__)
except Exception as e:
print('not ok')
print(e.__class__)
if __name__ == '__main__':
main()
Запуск выше приводит к:
not ok
<class 'my_app.MyLibException'>
Какой правильный способ обработкиисключения для такого сценария? Я хотел бы поймать возбужденное исключение здесь except MyLibException as e:
, а не except Exception as e:
.