PyObject_CallObject возвращает NULL при вызове функции Show () или Save () из Matplotlibcpp - PullRequest
0 голосов
/ 10 апреля 2020

Я интегрировал Matplotlib cpp в свой проект C ++ из:

https://github.com/lava/matplotlib-cpp

Я использую Clion для сборки по проекту, и вот как я это сделал связь:

    cmake_minimum_required(VERSION 3.13)
    project(beep)    
    set(CMAKE_CXX_STANDARD 14)
    set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -g -ftest-coverage -fprofile-arcs" )
    link_directories(C:/MinGW/lib)
    find_package (Python3 COMPONENTS Interpreter NumPy)
    include_directories(C:/Python37/include/)
    link_libraries(C:/Python37/libs/libpython37.a Python3::NumPy)
    include_directories( kissfft kissfft/tools matplotlib-cpp )
    add_executable(beep kissfft matplotlib-cpp  kissfft/tools/kiss_fftr.c  kissfft/_kiss_fft_guts.h Beep_Generator.cpp plottingVector.h)

Вот мой код:

#include "matplotlibcpp.h"
namespace plt = matplotlibcpp;
    void plotting() {
        try {
            plt::plot( {1, 2, 3, 4, 5, 6},{0,1,2,3,4,5},"test");
            plt::show();
        }
        catch (std::exception &e) {
            cout << e.what() << endl;
        }

Когда я запускаю этот код, я получаю эту ошибку:

Call to show() failed.

Когда я отлаживаю код, я видел проблему здесь:

matplotlibcpp.h(Line # 1835):  res = PyObject_CallObject(detail::_interpreter::get().s_python_function_show,detail::_interpreter::get().s_python_empty_tuple);

res становится NULL.

В чем здесь проблема? Как я могу решить это?

С уважением, Хубайб

1 Ответ

0 голосов
/ 10 апреля 2020

res возвращение NULL означает, что произошло исключение Python. К сожалению, оболочка, похоже, не проверяет это, а просто вызывает произвольное исключение C.

Для дальнейшего изучения вам необходимо использовать Python C API напрямую . Дважды проверьте, что было установлено исключение, а затем распечатайте его.

if (PyErr_Occurred()) {
    PyErr_PrintEx(0);
    PyErr_Clear(); // this will reset the error indicator so you can run Python code again
}
...