Chcę osadzić python w mojej aplikacji C++. Używam biblioteki Boost - świetne narzędzie. Ale mam jeden problem.Jak uzyskać tekst wyjątku Python
Jeśli funkcja pytona zgłasza wyjątek, chcę go przechwycić i wydrukować błąd w mojej aplikacji lub uzyskać szczegółowe informacje, takie jak numer wiersza w skrypcie python, który spowodował błąd.
Jak mogę to zrobić? Nie mogę znaleźć żadnych funkcji, aby uzyskać szczegółowe informacje o wyjątkach w Pythonie API lub Boost.
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() po prostu drukuje tekst błędu na stderr i skasowanie błędu, więc nie może być rozwiązaniem
Niesamowite, dokładnie to czego szukałem ... działa świetnie. –
To jest miłe. Odkryłem w niektórych przypadkach (dla mnie, boost:: python :: import czegoś nie w mojej PYTHONPATH) ptraceback będzie wynosił 0, więc zabezpieczyłbym się przed użyciem ptracebacka, jeśli jest 0. Również, możesz skomentować, co możemy zrobić z extype? Przypuszczam, że drukowanie tekstu typu wyjątku Pythona ma znaczenie. Jak to zrobimy? –
Jedno dodatkowe pytanie: czy nie mamy przeciekać pamięci w górze? Co uwalnia obiekty zwrócone przez PyErr_Fetch? (Nie jestem pewien co do obu przypadków CPython i boost :: pythoon) – elmo