我有一个包含Python代码的字符串,如果其中的OrderedDict
实例替换为{}
,我可以使用literal_eval
将其作为Python进行评估。
我试图使用ast.parse
和ast.NodeTransformer
进行替换,但是当我捕获nodetype == 'Name' and node.id == 'OrderedDict'
的节点时,我无法找到节点对象中作为参数的列表,以便我可以用Dict
节点替换它。
这是正确的方法吗?
一些代码:
from ast import NodeTransformer, parse
py_str = "[OrderedDict([('a', 1)])]"
class Transformer(NodeTransformer):
def generic_visit(self, node):
nodetype = type(node).__name__
if nodetype == 'Name' and node.id == 'OrderedDict':
pass # ???
return NodeTransformer.generic_visit(self, node)
t = Transformer()
tree = parse(py_str)
t.visit(tree)