Si hago (por ejemplo)Python C API: cómo obtener una representación de cadena de excepción?
open("/snafu/fnord")
en Python (y el archivo no existe), aparece un rastreo y el mensaje
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
me gustaría obtener la cadena anterior con Python C API (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 la información que recibo de PyErr_Fetch()
a la cadena de los espectáculos intérprete de Python? (Uno que no implica la construcción de tales cadenas para cada tipo de excepción).
El segundo argumento es una tupla y no una cadena. Y ya llamo PyErr_NormalizeException(). Pero PyErr_Fetch() no devuelve un objeto de excepción, solo el tipo de excepción. Entonces creo que tengo que crear el objeto de excepción, ¿no? Y paso el segundo argumento de PyErr_Fetch() al constructor? – ashcatch
Oh, acabo de comprobar mi código y no he llamado a PyErr_NormalizeException() en todos los casos. Llamarlo, de hecho convierte el segundo argumento en un objeto de excepción. Y convertir eso en una cadena con PyObject_Str() me da el resultado deseado. Muchas gracias. – ashcatch