Quiero incrustar python en mi aplicación C++. Estoy usando la biblioteca de Boost, una gran herramienta. Pero tengo un problema.Cómo obtener el texto de excepción de Python
Si la función python arroja una excepción, quiero capturarla e imprimir un error en mi aplicación u obtener información detallada como el número de línea en el script de Python que causó el error.
¿Cómo puedo hacerlo? No puedo encontrar ninguna función para obtener información de excepción detallada en Python API o Boost.
try {
module=import("MyModule"); //this line will throw excetion if MyModule contains an error
} catch (error_already_set const &) {
//Here i can said that i have error, but i cant determine what caused an error
std::cout << "error!" << std::endl;
}
PyErr_Print() sólo imprime texto de error a stderr y borra error por lo que no puede ser solución
Impresionante, esto es exactamente lo que he estado buscando ... funciona muy bien. –
Esto es bueno. He descubierto en algunos casos (para mí, un impulso;: python :: importación de algo que no está en mi PYTHONPATH) que el retroceso será 0, así que protegería contra el uso de un ptraceback si es 0. Además, ¿puedes comentar sobre lo que podemos hacer con extype? Supongo que imprimir el texto del tipo de excepción de python es significativo. ¿Como hacemos eso? –
Una pregunta adicional: ¿no estamos filtrando la memoria en la parte superior? ¿Qué libera los objetos devueltos por PyErr_Fetch? (No estoy seguro acerca de los casos de CPython y boost :: pythoon) – elmo