Python — краткий синтаксис для перехвата исключений в выражениях

#python #exception #syntax #expression #syntactic-sugar

#python #исключение #синтаксис #выражение #синтаксический-сахар

Вопрос:

Существует ли краткий синтаксис для перехвата и обработки исключений в выражениях. Например, если у нас есть какое-то сложное выражение eint(x) , и eext(y) было бы неплохо сделать другое:

 print(
    eext(
        eint(x)
        ecatch (ValueError, AssertionError) as ex1 do f'Exception {ex1} for {x}!'
        ecatch IndexError as ex2 do f'Exception {ex2} for {x}!'
    )
)
  

где LEFT ecatch(types, var) RIGHT возвращает выражение LEFT , если слева нет исключения, в противном случае проверяется, что исключение находится внутри types типов, если это так, то присваивается значение исключения var , и RIGHT выражение вычисляется и возвращается как результат целого выражения. Если существует необработанный тип исключения, то из общего выражения генерируется исключение, которое может (или не может) также перехватываться некоторыми другими ecatch выражениями справа.

Конечно, такой ecatch может быть смоделирован простой функцией, принимающей лямбды:

 def my_ecatch(left, extypes, right):
    try:
        return left()
    except extypes as ex:
        return right(ex)
  

но, может быть, для этого уже есть некоторый синтаксический сахар в Python?

Аналогичная обработка списков также может быть достигнута с помощью регулярных циклов, но существует понимание списка, которое может выглядеть лучше.

Комментарии:

1. Я почти уверен, что для этого нет сокращения.

2. @Barmar Может быть, есть какие-то известные предложения для этого, которые могут быть включены в более поздние версии Python?

3. Было предложение, но оно было отклонено. python.org/dev/peps/pep-0463