Вопрос
Почему виртуальные подклассы абстрактного исключения, созданного с использованием ABCMeta.register, не совпадают в исключении< /code>?
Справочная информация
Я хочу, чтобы исключения, выдаваемые пакетом, который я использую, преобразуются в MyException, так что код, который импортирует мой модуль, может перехватывать любое исключение, которое мой модуль выдает, кроме MyException: вместо исключения Exception, чтобы они не обязательно должны зависеть от деталей реализации (того факта, что я использую сторонний пакет).
Пример
Для этого я попытался зарегистрировать OtherException как MyException, используя абстрактный базовый класс:
# Tested with python-3.6
from abc import ABC
class MyException(Exception, ABC):
pass
class OtherException(Exception):
"""Other exception I can't change"""
pass
MyException.register(OtherException)
assert issubclass(OtherException, MyException) # passes
try:
raise OtherException("Some OtherException")
except MyException:
print("Caught MyException")
except Exception as e:
print("Caught Exception: {}".format(e))
Утверждение проходит (как и ожидалось), но исключение попадает во второй блок:
Caught Exception: Some OtherException
Подробнее здесь: https://stackoverflow.com/questions/498 ... exceptions