Вот что я пытаюсь сделать, я не уверен, что искать или как правильно спроектировать это:
Я работаю над иерархией исключений для приложения.Как часть этого, есть некоторые исключения, которые иногда могут быть фатальными, а другие - восстанавливаемыми - то, является ли конкретный экземпляр фатальным или восстанавливаемым, определяется во время выполнения в самом исключении.Для целей организации я хочу иметь возможность сделать что-то вроде (я работаю в Python):
try:
mightThrowAnException()
except RecoverableException:
handleThisException()
И тогда у меня будет что-то вроде:
class MyException(...):
...
Где MyException может принимать FatalException или RecoverableException в качестве базового класса, в зависимости от того, что происходит в конструкторе.
Я знаю, что у меня может быть два отдельных исключения MyFatalException
и MyRecoverableException
, а затем вырастать одно или несколько другое в коде, но будет много разных исключений для разных типов ошибок, которые могутбыть вызван из нескольких мест в коде, и исключение должно сделать несколько вещей, таких как проверка журналов ошибок, чтобы определить, должен ли этот экземпляр быть фатальным или нет, поэтому я думаю, что имеет смысл поместить весь этот код в сам обработчик исключений.
Итак, пара вопросов:
- Учитывая то, что я хочу сделать, это хороший способ сделать это или есть лучший дизайн для такого рода вещей?
- Я читал о фабриках классов, но я не вижу простого способа динамически изменить базовые классы с таким подходом, другие вещи, которые я рассматривал, - это метаклассы или переопределение
__new__()
исключения.метод, и я не совсем уверен, каковы плюсы и минусы каждого из этих трех подходов.Является ли какой-либо из этих подходов правильным или мне нужно что-то еще?