gpt4 book ai didi

python-3.x - Python 3.6,嵌入式 C++,添加模块路径,TypeError : a bytes-like object is required, 不是 'str'

转载 作者:行者123 更新时间:2023-12-01 06:01:24 25 4
gpt4 key购买 nike

在 C++ 应用程序中嵌入 Python 3.6 时,我正在尝试扩展模块搜索路径。将当前工作目录插入系统模块搜索路径的代码是:

PyObject *sysPath = PySys_GetObject("path");
PyObject *path = PyBytes_FromString(".");
int result = PyList_Insert(sysPath, 0, 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, in find_spec
File "<frozen importlib._bootstrap_external>", 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

关于python-3.x - Python 3.6,嵌入式 C++,添加模块路径,TypeError : a bytes-like object is required, 不是 'str',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44929901/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com