safe-returns
Декоратор для преобразования выходного типа данных функции в алгебраический тип данных, совмещая его с возможными типами исключений.
Основная цель пакета — предоставить возможность явно указывать типы исключений, которые может выбрасывать функция, и отслеживать их средствами тайп-чекеров.
Пакет предоставляет два декоратора: @safe
и @async_safe
для функций и корутин соответственно.
Декоратор предоставляет удобный механизм указания типов исключений, которые могут возникнуть в ходе работы функции. Это позволяет упростить написание кода обработки таких исключений, используя подсказки IDE и тайп-чекера, а также избегая необходимости просмотра кода вызываемой функции для определения возможных случаев исключений.
Ключевые особенности
- Пакет позволяет декорировать функции и корутины.
- Результат функции оборачивается в объект
Success
, чтобы отличить возникшее исключение от возвращённого значения, например, из фабрики исключений. - Широкий механизм указания типов. Используя оператор или (
|
), аналогичныйUnionType
, можно перечислять конкретные типы, передавать коллекции, составленные во время выполнения, или задекорированные таким образом функции. - Порождающий механизм типизации не ограничивает количество типов исключений, которые может распознавать тайп-чекер.
- Использует чистый Python для типизации и не имеет дополнительных зависимостей.
Зависимости
Требуется только Python >= 3.11
.
Установка
Установка из PyPI: safe-returns.
Примеры
При использование паттерн-матчинга будет указано замечание что KeyError
не обрабатывается.
from safe import safe, Success, Failure
@safe @ ValueError | KeyError
def foo() -> int | str: ...
match foo():
case Success(value=int()):
print("It's int")
case Success(value=str()):
print("It's str")
case Failure(error=ValueError()):
print("Catch ValueError")
Больше примеров см. Возможности.
Лицензия
Этот проект распространяется на условиях лицензии MIT.