API Python C: come ottenere la rappresentazione in stringa dell'eccezione?
-
05-07-2019 - |
Domanda
Se lo faccio (ad es.)
open("/snafu/fnord")
in Python (e il file non esiste), ottengo un traceback e il messaggio
IOError: [Errno 2] No such file or directory: '/snafu/fnord'
Vorrei ottenere la stringa sopra con l'API C di Python (cioè un interprete Python incorporato in un programma C). Ne ho bisogno come stringa, non come output sulla console.
Con PyErr_Fetch ()
posso ottenere l'oggetto tipo dell'eccezione e il valore. Per l'esempio sopra, il valore è una tupla:
(2, 'No such file or directory', '/snafu/fnord')
C'è un modo semplice dalle informazioni che ottengo da PyErr_Fetch ()
alla stringa mostrata dall'interprete Python? (Uno che non implica la costruzione di tali stringhe per ciascun tipo di eccezione).
Soluzione
Penso che le eccezioni di Python vengano stampate eseguendo " str () " sull'istanza dell'eccezione, che restituirà la stringa formattata che ti interessa. Puoi ottenerlo da C chiamando Metodo PyObject_Str ()
descritto qui:
https://docs.python.org/c-api/object.html
Buona fortuna!
Aggiornamento: sono un po 'confuso perché il secondo elemento che ti viene restituito da PyErr_Fetch ()
è una stringa. La mia ipotesi è che stai ricevendo un'eccezione "non normalizzata" e devi chiamare PyErr_NormalizeException ()
per trasformare quella tupla in un "reale" Eccezione che può formattarsi come una stringa come vuoi tu.