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
Python C-Api, PyImport_Import
Du bekommst laut https://docs.python.org/3/c-api/exceptions.html ein traceback Objekt. Das kannst du dann ausgeben oder inspizieren.
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.
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
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
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.
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.