Абстрактные базовые классы и исключенияPython

Программы на Python
Anonymous
Абстрактные базовые классы и исключения

Сообщение Anonymous »

Вопрос

Почему виртуальные подклассы абстрактного исключения, созданного с использованием 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

Вернуться в «Python»