Seite 1 von 1

Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 07:19
von alti23
Hallo zusammen,

ich möchte via Python C-Api aus meinem C++ Code heraus Pythonscripte ausführen. Diese werden so:

pModule = PyImport_Import(pName);

if(!pModule)
{
// schreibe Fehlermeldung hier
}

geladen.
Mir gelingt es jedoch nicht, aus der C-Api eine gescheite Fehlermeldung(also Art des Fehlers, Zeilennummer, ...) für den Fall herauszuholen, wenn das geladene Script Syntaxfehler, ... enthält.
Hat das schon mal jemand erfolgreich umgesetzt?
Vielen Dank.

Gruss Marko

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:08
von __deets__
Du bekommst laut https://docs.python.org/3/c-api/exceptions.html ein traceback Objekt. Das kannst du dann ausgeben oder inspizieren.

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:15
von alti23
Hallo,

vielen Dank für die Rückmeldung.
Das beschriebene TRacebackObj liefert sehr detaillierte Info's, falls während der Ausführung etwas schief geht, jedoch leider nicht beim PyImport_Import.

Gruss Marko

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:18
von __deets__
Ich sehe jetzt nicht, was an einem import anders sein soll. Ein ImportError wird ausgelöst, und ein traceback dazu. Was fehlt dir denn da?

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:23
von alti23
def testfu()
pass

Bei dem hier fehlenden ':' liefert traceback.format_exc() lediglich: "NoneType: None".

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:27
von __deets__
Du zeigst nicht, wie du das aufrufst. Darum kann man nur raten. Aber in der zitierten Dokumentation ist der Unterschied zwischen einer ‘im flug’ befindlichen und einer gefangenen exception beschrieben. Das denke ich könnte hier die Ursache sein.

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:37
von alti23
Ich mache folgendes:

pModule = PyImport_Import(pName);

if(!pModule)
{
printf traceback.format_exc()
}

pName enthält das Script mit dem oben beschriebenen Fehler und traceback.format_exc() liefert den oben beschriebenen nichts-sagenden Text zurück.
Welche Stelle in dem Dokument genau meinst Du?
Vielen Dank für Deine Hilfe.

Gruss

Re: Python C-Api, PyImport_Import

Verfasst: Freitag 22. Juli 2022, 09:52
von __deets__
Das ist nicht was du machst. Denn das ist pseudo Code.

Und in dem Link steht extra hervorgehoben

Note The error indicator is not the result of sys.exc_info(). The former corresponds to an exception that is not yet caught (and is therefore still propagating), while the latter returns an exception after it is caught (and has therefore stopped propagating).

Und in der Sektion https://docs.python.org/3/c-api/excepti ... -indicator steht, wie man an den error kommt.