LINUX.ORG.RU

Embedded Python and error handling


0

0

Хотелось бы получить более детальную информацию об ошибках, приключившихся при выполнении питоньего скрипта из с проги функцией PyRun_SimpleString. Почему-то все сообщения об ошибках змеюка выводит в stderr, функции PyErr_Occurred и PyErr_Fetch не обнаруживают наличия ошибок в скрипте. Можно было бы перенаправить stderr, но неужели нету более цивильного способа?

★★★★☆

#include "Python.h"

int main(int argn, char** argv){

Py_Initialize();
//PyRun_SimpleString("raise Exception\0");
PyRun_String("raise Exception\0", NULL, NULL, NULL);
PyErr_Print();


return 0;

}

anonymous
()
Ответ на: комментарий от bugmaker

ну типа да )))

но надо копать в сторону PyRun_String

потому что про _SimpleString в доках прямо написано -- никакой информации об ошибке получить невозможно

вот нарыл рабочий пример:
http://groups.google.com/group/comp.lang.python/msg/681a731be8aad32d

anonymous
()
Ответ на: комментарий от anonymous

только чтобы реальные скрипты работали 
придётся __builtins__ ручками подключать. 
в таком вот примерно духе:


#include "Python.h"

int main(int argc, char **argv) {

    PyObject *dict;
    PyObject *result;

    Py_Initialize();
    dict = PyDict_New();
	PyDict_SetItemString(dict, "__builtins__", PyEval_GetBuiltins());

    result =  PyRun_String("raise ValueError(\"foobar\")\n",
        Py_file_input, dict, dict);
    if (result==NULL) {
        PyErr_Print();
        return;
    } else {
        Py_DECREF(result);
    }

}

anonymous
()
Ответ на: комментарий от anonymous

$ gcc -I/usr/include/python2.3/ py.c -lpython2.3 -o py
$ ./py
Traceback (most recent call last):
File "<string>", line 1, in ?
ValueError: foobar

типа работает -- вот на том месте где PyErr_Print надо ошибку и ловить

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.