Question

Si je le fais (par exemple)

 open("/snafu/fnord")

en Python (et le fichier n'existe pas), je reçois une trace et le message

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

Je voudrais obtenir la chaîne ci-dessus avec l'API C de Python (c'est-à-dire un interpréteur Python intégré dans un programme C). J'en ai besoin en tant que chaîne, pas en sortie sur la console.

Avec PyErr_Fetch () , je peux obtenir le type d'objet de l'exception et la valeur. Pour l'exemple ci-dessus, la valeur est un tuple:

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

Existe-t-il un moyen simple de passer des informations obtenues de PyErr_Fetch () à la chaîne affichée par l'interpréteur Python? (C’est-à-dire qu’il n’est pas nécessaire de construire vous-même de telles chaînes pour chaque type d’exception.)

Était-ce utile?

La solution

Je pense que les exceptions Python sont imprimées en exécutant & str; str () " sur l’exception qui renverra la chaîne formatée qui vous intéresse. Vous pouvez l’obtenir de C en appelant le PyObject_Str () décrite ici:

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

Bonne chance!

Mise à jour: Je ne comprends pas très bien pourquoi le deuxième élément qui vous est renvoyé par PyErr_Fetch () est une chaîne. Je suppose que vous recevez une "exception non normalisée". et devez appeler PyErr_NormalizeException () pour transformer ce tuple en un "réel". Une exception qui peut se formater comme une chaîne comme vous le souhaitez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top