基本上我的问题如下......
在 Python 中,我有一个函数将返回以下形式的输出字符串:
'union(symbol(a), symbol(b))'
在这个字符串中找到的函数形式实际上存在于一个名为 RegExTree 的对象类中。此外,该类包含一个使用函数“construct()”构造树数据结构的函数,如下所示:
tree = RegExTree()
tree.construct(union(symbol(a), symbol(b))
上面两行代码可以正常工作,基于解析构造函数中的参数构造一棵树。我想以类似的方式传递一个字符串,也许这行代码说明了我想要的:
tree = RegExTree()
expression = 'union(' + 'symbol(' + 'a' + ')' + ', ' + 'symbol(' + 'b' + ')' + ')'
tree.construct(expression)
现在我编写上面的代码的方式会产生一个错误(在 Linux 终端中),如下所示:
$ Attribute Error: 'str' object has no attribute 'value'
您能否强制 Python 将字符串解释为有效的参数/代码行。本质上,不是作为字符串,而是作为对象构造函数。
有没有办法让 Python 将字符串解释为会被解析/编译成对象的东西,并让它从字符串构造对象,就好像它是一行代码来描述相同的最终目标一样?我要的是某种后门类型转换吗?还是我所要求的在编程语言中是不可能的,特别是 Python?
编辑:使用迈克尔在下面提出的涉及“eval()”的解决方案,有一种方法可以将其破解为形式:
tree = RegExTree()
a = 'a'
b = 'b'
expression = 'union(' + 'symbol(' + a + ')' + ', ' + 'symbol(' + b + ')' + ')'
tree.construct(eval(expression))
有没有更好的方法来做到这一点?或者只是我的输出作为字符串表示函数的性质不是一个好主意?[感谢 martineau 对我的解决方案编辑的更正!]