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.Name
s используйте следующий код:
targets = ', '.join(t.id for t in assignment.targets if isinstance(t, ast.Name))