Pregunta

Si lo hago (por ejemplo)

 open("/snafu/fnord")

en Python (y el archivo no existe), recibo un rastreo y el mensaje

 IOError: [Errno 2] No such file or directory: '/snafu/fnord'

Me gustaría obtener la cadena anterior con la API C de Python (es decir, un intérprete de Python integrado en un programa C). Lo necesito como una cadena, no como salida a la consola.

Con PyErr_Fetch () puedo obtener el tipo de objeto de la excepción y el valor. Para el ejemplo anterior, el valor es una tupla:

 (2, 'No such file or directory', '/snafu/fnord')

¿Hay una manera fácil de obtener la información que recibo de PyErr_Fetch () a la cadena que muestra el intérprete de Python? (Una que no implique construir esas cadenas para cada tipo de excepción).

¿Fue útil?

Solución

Creo que las excepciones de Python se imprimen ejecutando " str () " en la instancia de excepción, que devolverá la cadena formateada que le interesa. Puede obtener esto de C llamando a PyObject_Str () método descrito aquí:

https://docs.python.org/c-api/object.html

¡Buena suerte!

Actualización: Estoy un poco confundido por qué el PyErr_Fetch () te devuelve el segundo elemento. Supongo que está recibiendo una " excepción no normalizada " y debes llamar a PyErr_NormalizeException () para convertir esa tupla en " real " Excepción que puede formatearse a sí misma como una cadena como usted quiere.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top