[New-bugs-announce] [issue44825] node.annotation is not a str in `ast`'s `class _Unparser(NodeVisitor)`

Samuel Marks report at bugs.python.org
Wed Aug 4 05:41:50 EDT 2021


New submission from Samuel Marks <samuelmarks at gmail.com>:

I tried making `node.annotation` an `ast.Name("str", ast.Load())`, which worked but when the AST was unparsed to a string it shows as `# type: <ast.Name object at 0x7fe0f393bfa0>`.
https://github.com/offscale/cdd-python/runs/3213864077

Replicate with:
```
unparse(Assign(annotation=None, simple=1, targets=[Name("foo", Store())], value=Constant(value=5, kind=None), expr=None, expr_targe
   ...: t=None, expr_annotation=None, type_comment=Name('str', Load()), lineno=None))
```

Checking what it expects, it does expect a str. E.g.,:
```
$ python3.9 -c 'import ast; tc=ast.parse("foo = 5 # type: int", type_comments=True).body[0].type_comment; print("type_comment is a", type(tc).__name__, "with value", tc)'
type_comment is a str with value int
```

But when I do make it a str and unparse it, I get:
```
File "/opt/python3.10/lib/python3.10/ast.py", line 1674, in unparse
    return unparser.visit(ast_obj)
  File "/opt/python3.10/lib/python3.10/ast.py", line 808, in visit
    self.traverse(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 799, in traverse
    super().visit(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 410, in visit
    return visitor(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 1005, in visit_FunctionDef
    self._function_helper(node, "def")
  File "/opt/python3.10/lib/python3.10/ast.py", line 1023, in _function_helper
    self._write_docstring_and_traverse_body(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 816, in _write_docstring_and_traverse_body
    self.traverse(node.body)
  File "/opt/python3.10/lib/python3.10/ast.py", line 797, in traverse
    self.traverse(item)
  File "/opt/python3.10/lib/python3.10/ast.py", line 799, in traverse
    super().visit(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 410, in visit
    return visitor(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 879, in visit_AnnAssign
    self.traverse(node.annotation)
  File "/opt/python3.10/lib/python3.10/ast.py", line 799, in traverse
    super().visit(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 410, in visit
    return visitor(node)
  File "/opt/python3.10/lib/python3.10/ast.py", line 414, in generic_visit
    for field, value in iter_fields(node):
  File "/opt/python3.10/lib/python3.10/ast.py", line 252, in iter_fields
    for field in node._fields:
AttributeError: 'str' object has no attribute '_fields'
```

----------
messages: 398878
nosy: samuelmarks
priority: normal
severity: normal
status: open
title: node.annotation is not a str in `ast`'s `class _Unparser(NodeVisitor)`
versions: Python 3.10, Python 3.11, Python 3.9

_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue44825>
_______________________________________


More information about the New-bugs-announce mailing list