加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python-3.x – Python 3.6,嵌入式C,添加模块路径,TypeError:需

发布时间:2020-12-20 13:18:30 所属栏目:Python 来源:网络整理
导读:我试图在C ++应用程序中嵌入 Python 3.6时扩展模块搜索路径.将当前工作目录插入系统模块搜索路径的代码是: PyObject *sysPath = PySys_GetObject("path");PyObject *path = PyBytes_FromString(".");int result = PyList_Insert(sysPath,path); 这工作正常(
我试图在C ++应用程序中嵌入 Python 3.6时扩展模块搜索路径.将当前工作目录插入系统模块搜索路径的代码是:

PyObject *sysPath = PySys_GetObject("path");
PyObject *path = PyBytes_FromString(".");
int result = PyList_Insert(sysPath,path);

这工作正常(没有错误),但是当我尝试运行模块时Python不高兴:

PyObject *pModule = PyImport_ImportModule("python_demo_x");

Python报告的错误是:

Could not load module python_demo_x
Traceback (most recent call last):
  File "<frozen importlib._bootstrap>",line 961,in _find_and_load
  File "<frozen importlib._bootstrap>",line 946,in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>",line 885,in _find_spec
  File "<frozen importlib._bootstrap_external>",line 1157,in find_spec
  File "<frozen importlib._bootstrap_external>",line 1129,in _get_spec
  File "<frozen importlib._bootstrap_external>",line 1245,line 1302,in _fill_cache
TypeError: a bytes-like object is required,not 'str'

通过反复试验,我发现用双引号包装路径解决了这个问题:

PyObject *path = PyBytes_FromString(""."");

我找不到任何表明包装路径是必需的文档.这是必需的,还是有其他错误?

解决方法

Python 3改变了字符串的表示方式.
我在使用Popen从外部执行其他应用程序和代码时遇到过这种情况.

尝试将所有字符串从“some-string”更改为b“some-string”,将其编码为字节字符串.
如果需要字符串返回值,则可能需要将生成的字节对象解码为字符串.
你会这样做:.decode(‘utf-8’)

从Python 3.6文档:
“在Python 3.x中,那些隐式转换已经消失 – 8位二进制数据和Unicode文本之间的转换必须是显式的,字节和字符串对象总是比较不相等.”

更多信息请访问:https://docs.python.org/3/library/stdtypes.html

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读