все Python 3astпонятие
ast.ExceptHandler
управление потоком
Узел одной ветки except: тип исключения в type, имя из as в name и тело body. Ветки лежат в списке handlers узла Try или TryStar.
Синтаксис
ast.ExceptHandler(type=None, name=None, body)
name — строка или None, а не узел Name, поэтому поиск переменных через visit_Name её не найдёт. Голый except: даёт type=None — так линтеры и ловят «глотающий всё» обработчик. except (A, B) хранит в type узел Tuple, и все классы приходится доставать из его elts. Ветки except* в 3.11+ тоже ExceptHandler, но лежат в TryStar.
Примеры
import ast
src = 'try:\n pass\nexcept (KeyError, ValueError) as e:\n pass\nexcept:\n pass'
first, bare = ast.parse(src).body[0].handlers
print(type(first.type).__name__, repr(first.name)) # → Tuple 'e'
print([el.id for el in first.type.elts]) # → ['KeyError', 'ValueError']
print(bare.type, bare.name) # → None None
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности