все Python 3до 3.14Удалено из стандартной библиотекипонятие
ast.Num / ast.Str / ast.Bytes / ast.NameConstant / ast.Ellipsis
удалено
Старые классы узлов ast для чисел, строк, байтов, None/True/False и многоточия. Удалены в Python 3.14 — используйте ast.Constant.
Синтаксис
isinstance(node, ast.Num) # до 3.14
До Python 3.8 разбор кода давал для каждого вида литерала свой узел: Num с полем n, Str и Bytes с полем s, NameConstant и Ellipsis. С 3.8 парсер создаёт один узел ast.Constant, а старые имена жили как совместимые обёртки — их и убрали вместе с полями n и s. Как переписать: isinstance(node, ast.Num) меняется на isinstance(node, ast.Constant) и проверку типа значения, например isinstance(node.value, int); node.n и node.s — на node.value; методы visit_Num и visit_Str в NodeVisitor — на один visit_Constant; ast.Num(n=1) при построении дерева — на ast.Constant(value=1).
Примеры
# Python 3.14+
import ast
try:
ast.Num
except AttributeError as e:
print(type(e).__name__) # → AttributeError
# Python 3.14+
import ast
class Literals(ast.NodeVisitor):
def visit_Constant(self, node):
print(type(node.value).__name__, repr(node.value))
Literals().visit(ast.parse("x = 42 + len('hi')"))
# → int 42
# → str 'hi'
import ast
node = ast.parse('42').body[0].value
print(isinstance(node, ast.Num), node.n) # → True 42
print(type(node).__name__) # → Constant
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности