[New-bugs-announce] [issue38131] compile(mode='eval') uninformative error message
Ilya Kamenshchikov
report at bugs.python.org
Thu Sep 12 06:21:59 EDT 2019
New submission from Ilya Kamenshchikov <ikamenshchikov at gmail.com>:
While trying to construct a valid ast node programmatically, I have tried following:
import ast
tree = ast.BinOp(left=ast.Num(n=2), right=ast.Num(n=2), op=ast.Add())
expr = ast.Expression(body=[tree])
ast.fix_missing_locations(expr)
exe = compile(expr, filename="", mode="eval")
print(eval(exe))
Unfortunately this gives unhelpful error message:
>>> exe = compile(expr, filename="", mode="eval")
TypeError: required field "lineno" missing from expr
Turns out I need to make body of ast.Expression not a list, but a node:
expr = ast.Expression(body=tree) # works
Confusion also comes from naming the field "body", which takes value of a list for ast.Module and some others.
----------
components: Library (Lib)
messages: 352090
nosy: Ilya Kamenshchikov
priority: normal
severity: normal
status: open
title: compile(mode='eval') uninformative error message
versions: Python 3.6, Python 3.7, Python 3.8
_______________________________________
Python tracker <report at bugs.python.org>
<https://bugs.python.org/issue38131>
_______________________________________
More information about the New-bugs-announce
mailing list