все Python 3устарело в 3.9astпонятие
ast.slice
выражения
Устаревший абстрактный класс старых узлов индексации Index и ExtSlice. С 3.9 индекс хранится прямо выражением, а срез a:b — узлом Slice.
Синтаксис
node.slice # вместо ast.Index / ast.ExtSlice
Не путайте с узлом Slice (с заглавной): Slice — наследник expr и с 3.9 лежит в Subscript.slice, а ast.slice к нему отношения не имеет, так что isinstance(node.slice, ast.slice) всегда False. Код, написанный до 3.9, ждал Subscript.slice.value через Index — теперь берите Subscript.slice напрямую, а a[1, 2] даёт Tuple вместо ExtSlice.
Примеры
import ast
sub = ast.parse('a[1:2]', mode='eval').body
print(type(sub.slice).__name__, isinstance(sub.slice, ast.slice)) # → Slice False
print(type(ast.parse('a[0]', mode='eval').body.slice).__name__) # → Constant
print(type(ast.parse('a[1, 2]', mode='eval').body.slice).__name__) # → Tuple
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности