Ich möchte Python in meine C++ - Anwendung einbetten. Ich benutze Boost-Bibliothek - tolles Werkzeug. Aber ich habe ein Problem.Wie bekomme ich Python-Ausnahmetext
Wenn Python-Funktion eine Ausnahme auslöst, möchte ich es abfangen und Fehler in meiner Anwendung drucken oder einige detaillierte Informationen wie Zeilennummer in Python-Skript, die Fehler verursacht.
Wie kann ich es tun? Ich kann keine Funktionen finden, um detaillierte Ausnahmeinformationen in Python API oder Boost zu erhalten.
try {
module=import("MyModule"); //this line will throw excetion if MyModule contains an error
} catch (error_already_set const &) {
//Here i can said that i have error, but i cant determine what caused an error
std::cout << "error!" << std::endl;
}
PyErr_Print() nur Fehlertext zu Stderr druckt und löschen Fehler so dass es nicht
Lösung sein kann
Super, das ist genau das, was ich gesucht habe ... funktioniert super. –
Das ist schön. Ich habe in einigen Fällen entdeckt (für mich, ein Boost;: Python :: Import von etwas nicht in meinem PYTHONPATH) ptraceback wird 0, also würde ich gegen die Verwendung eines Ptraceback schützen, wenn es 0 ist. Auch können Sie Kommentar zu dem, was wir mit Extype machen können? Ich denke, das Drucken des Textes des Python-Ausnahmetyps ist sinnvoll. Wie machen wir das? –
Eine zusätzliche Frage: Sind wir nicht Speicher in oben undicht? Was gibt Objekte frei, die von PyErr_Fetch zurückgegeben werden? (Ich bin mir nicht sicher sowohl über CPython und Boost :: Python Fällen) – elmo