首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >当我尝试从c++调用python函数时,为什么会得到"no attirubute error“

当我尝试从c++调用python函数时,为什么会得到"no attirubute error“
EN

Stack Overflow用户
提问于 2021-01-30 04:16:02
回答 1查看 37关注 0票数 0

您好,我遵循此tutorial从c++代码调用python函数。

这是embeddedPython.cpp

代码语言:javascript
复制
#define PY_SSIZE_T_CLEAN
#include <Python.h>
#include <iostream>

int
main(int argc, char *argv[])
{
    PyObject *pName, *pModule, *pFunc;
    PyObject *pArgs, *pValue;
    int i;

    if (argc < 3) {
        fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
        return 1;
    }

    Py_Initialize();
    pName = PyUnicode_DecodeFSDefault(argv[1]);
    /* Error checking of pName left out */
    std::cout << pName << std::endl;
    pModule = PyImport_Import(pName);
    Py_DECREF(pName);

    if (pModule != NULL) {
        pFunc = PyObject_GetAttrString(pModule, argv[2]);
        /* pFunc is a new reference */
        // didn't add the all code 
    }
    return 0;
}

和test.py

代码语言:javascript
复制
def multiply(a,b):
    print("Will compute", a, "times", b)
    c = 0
    for i in range(0, a):
        c = c + b
    return c

最后是CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 2.6)
project(demo)
find_package(PythonLibs REQUIRED)
include_directories(${PYTHON_INCLUDE_DIRS})
add_executable(demo embeddedPython.cpp)
target_link_libraries(demo ${PYTHON_LIBRARIES})

当我尝试运行以下命令时:

代码语言:javascript
复制
./demo test multiply 3 2

我得到以下错误。

代码语言:javascript
复制
AttributeError: module 'test' has no attribute 'multiply'
Cannot find function "multiply"

可能的问题是什么?我想;我可以访问文件,但是代码找不到函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-30 05:22:32

Python文件的名称是test.py,但是已经有一个用于回归测试的Python模块test (参见Python文档),它不包含multiply()函数。重命名您的python文件,以避免与现有模块冲突。本教程中的示例使用了有效的multiply.py。我使用的是test1.py,它也可以工作。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65961121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档