【发布时间】:2013-04-05 20:40:32
【问题描述】:
我正在开发一个嵌入 Python 解释器的系统,我需要在给定 C API 的字符串的情况下构造一个 PyObject*。
我有一个代表字典的const char*,格式正确,eval() 可以在 Python 中正常工作,即:"{'bar': 42, 'baz': 50}"。
目前,这是使用Py_Unicode_ api(代表一个字符串)作为PyObject* 传递给Python,所以在我的python 解释器中,我可以成功编写:
foo = eval(myObject.value)
print(foo['bar']) # prints 42
我想将其更改为在 C 端自动“评估”const char*,并返回一个代表完整字典的PyObject*。如何在 C API 中将此字符串转换为字典?
【问题讨论】:
-
您确定不想为此使用
ast.literal_eval而不是eval? (其实并不影响答案,但值得思考。) -
@abarnert 正在解析的字符串都在我的控制之下,所以我认为我不需要这样做——它总是一个包含各种浮点值、整数值、布尔值或(正确转义)字符串值。
-
如果它总是一个包含float、int、bool和字符串reprs的字典,为什么不使用
literal_eval?它更简单一些,并且您可以免费获得一些验证。 -
@abarnert 如果代码更简单,那很好 - 我只是想弄清楚如何在 C API 方面处理这个问题,所以脚本只能看到字典。
-
其实我夸大了,说它更简单;
builtins与ast一样容易获得,或者更容易获得,之后它们是相同的。也许这只是一个下意识的反应……
标签: python c python-3.x