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).

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top