【发布时间】:2014-07-18 14:19:11
【问题描述】:
所以我有一个 C 程序,它使用嵌入式 CPython 解释器来执行 Python 代码。问题是,如果 Python 代码有错误,解释器提供的行号信息有点无用,因为每次调用 PyEval_EvalCodeEx 从 1 开始计算行数。所以,我想给 Python 解释器一个上下文,就行号而言,每当我执行代码时。
有没有办法做到这一点?查看PyEval_EvalCodeEx 的定义,它最终是Python C-API 公开的代码执行的最低级别函数,我看不到任何传递行号信息的机会。
文档简单地说:
PyObject* PyEval_EvalCodeEx(PyObject *co, PyObject *globals, PyObject *locals, PyObject **args, int argcount, PyObject **kws, int kwcount, PyObject **defs, int defcount, PyObject *closure)在给定特定环境的情况下评估预编译的代码对象 评估。该环境由全球字典和 局部变量、参数数组、关键字和默认值,以及 单元格的闭包元组。
那么这根本不可能吗?
【问题讨论】:
-
你能不能反过来做——将行号信息存储在你的 C 程序中,捕获嵌入式解释器给你的输出,并在显示给用户之前替换正确的行数?
-
当然可以,但是我必须解析 Python 错误消息,这似乎不太可靠。
标签: python c python-3.x python-c-api cpython