все Python 3astпонятие
ast.Is
операторы
Маркер сравнения is в дереве ast: лежит в поле Compare.ops и полей не имеет.
Синтаксис
ast.Is()
Инструменты проверки стиля ищут именно его: 'x is 1' или 'x is "a"' — Compare с Is и Constant справа, сравнение тождества с литералом, на которое Python 3.8+ выдаёт SyntaxWarning. 'is not' — один оператор IsNot, а не Is под Not. Узлы-маркеры сравнивают по типу (isinstance), а не через ==: у узлов ast нет __eq__, и ast.Is() == ast.Is() — False.
Примеры
import ast
src = 'if a is None: pass\nif b is 1: pass'
for node in ast.walk(ast.parse(src)):
if isinstance(node, ast.Compare) and isinstance(node.ops[0], ast.Is):
rhs = node.comparators[0]
if isinstance(rhs, ast.Constant) and rhs.value is not None:
print('literal is at line', node.lineno) # → literal is at line 2
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности