Python AST代码示例取自《严肃的Python:部署、可扩展性、测试等方面的黑带建议》一书



我正在读Julien Danjou的《严重的Python:部署、可扩展性、测试等方面的黑带建议》一书,我遇到了第8章中的代码问题。这是代码:

import ast
hello_world = ast.Str(s = 'hello world!', lineno=1, col_offset=1)
print_name = ast.Name(id='print', ctx=ast.Load(), lineno=1, col_offset=1)
print_call =  ast.Call(func=print_name, ctx=ast.Load(), args=[hello_world], keywords=[], lineno=1, col_offset=1)
module = ast.Module(body=[ast.Expr(print_call, lineno=1, col_offset=1)], lineno=1, col_offset=1)
code = compile(module, '', 'exec')
eval(code)

它给了我以下错误:

code = compile(module, '', 'exec')
TypeError: required field "type_ignores" missing from Module

我仔细检查了一下是否输入了错误的内容,但没有发现任何错误。

有人能给我一个线索吗?

非常感谢!

这个错误以及如何修复它在本期中有解释:python ast模块中发生了更改,可能在本书出版后,ast.Module现在希望您传递一个名为type_ignores的列表。出于您的目的,您可以只传递一个空列表:

module = ast.Module(
body=[ast.Expr(print_call, lineno=1, col_offset=1)],
lineno=1,
col_offset=1,
type_ignores=[],
)

完整的工作代码示例。

最新更新