Pyright/mypy: "expr" не имеет атрибута "id"

Код:

def extract_assignment(assignment: ast.Assign) -> Dict[str, LINES_RANGE]:
    targets = ', '.join(t.id for t in assignment.targets)

pyright / mypy:

ошибка: "expr" не имеет атрибута "id"

Из составленного:

class Assign(stmt):
    targets: typing.List[expr]
    value: expr

1 ответ

Решение

Рассмотрим следующий код:

x = [100]
x[0] = 200

Выполняется следующая проверка:

import ast

code = """
x = [100]
x[0] = 200
"""

root = ast.parse(code)
for node in ast.walk(root):
    if isinstance(node, ast.Assign):
        print(type(node.targets[0]))

печатает следующее:

<class '_ast.Name'>
<class '_ast.Subscript'>

Так что в этом случае ast.expr может быть ast.Name или же _ast.Subscript. Только ast.Name имеет id атрибут.

Использовать только ast.Names используйте следующий код:

targets = ', '.join(t.id for t in assignment.targets if isinstance(t, ast.Name))
Другие вопросы по тегам