Se faccio (per esempio)API C Python: come ottenere la rappresentazione stringa dell'eccezione?
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 di cui sopra con Python API C (cioè un interprete Python incorporato in un programma C). Ho bisogno di una stringa, non di uscita alla console.
Con PyErr_Fetch()
È possibile ottenere l'oggetto tipo dell'eccezione e il valore. Per l'esempio precedente, il valore è una tupla:
(2, 'No such file or directory', '/snafu/fnord')
C'è un modo semplice dalle informazioni che ricevo da PyErr_Fetch()
alla stringa spettacoli interprete Python? (Uno che non comporta la costruzione di tali stringhe per ogni tipo di eccezione.)
Il secondo argomento è una tupla e non una stringa. E chiamo già PyErr_NormalizeException(). Ma PyErr_Fetch() non restituisce un oggetto eccezione, solo il tipo di eccezione. Quindi devo creare io stesso l'oggetto di eccezione, immagino? E passo il secondo argomento di PyErr_Fetch() al costruttore? – ashcatch
Oh, ho appena controllato il mio codice e non ho chiamato PyErr_NormalizeException() in tutti i casi. Chiamandolo, inverte effettivamente il secondo argomento in un oggetto di eccezione. E convertirlo in una stringa con PyObject_Str() mi ottiene il risultato desiderato. Molte grazie. – ashcatch