[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