Allen wrote: > I use try catch, but cannot catch the execeptions of execution python > method. > > PYCALL_API void PyCall(const char * pszModule, const char * pszFunc, > void * pArg) > { > if (pszModule == NULL || pszFunc == NULL) > { > return; > } > > Py_Initialize(); > > PyObject * pModule = NULL; > PyObject * pFunc = NULL; > > try { > > pModule = PyImport_ImportModule(pszModule); > pFunc = PyObject_GetAttrString(pModule, pszFunc); > > PyEval_CallObject(pFunc, (PyObject*)pArg); > } catch (...) { > fprintf(stderr, "Error: call python method failed"); > } > > Py_Finalize(); > } > > Can I catch it from C++?
No. CPython is written in C, not C++, and C has no concept of exceptions. Exceptions in Python is usually indicated by return value in the interpreter, and has no mapping to the C++ exception model. You should never let C++ exceptions propagate into the python functions either. PyImport_ImportModule will return NULL if an exception occured, and so will also PyObject_GetAttrString and PyEval_CallObject do. -- rbh -- http://mail.python.org/mailman/listinfo/python-list