Tôi muốn nhúng python vào ứng dụng C++ của mình. Tôi đang sử dụng thư viện Boost - công cụ tuyệt vời. Nhưng tôi có một vấn đề.Cách lấy văn bản ngoại lệ Python
Nếu hàm python ném ngoại lệ, tôi muốn bắt và in lỗi trong ứng dụng của tôi hoặc nhận một số thông tin chi tiết như số dòng trong tập lệnh python gây ra lỗi.
Tôi có thể làm như thế nào? Tôi không thể tìm thấy bất kỳ chức năng nào để có được thông tin ngoại lệ chi tiết trong Python API hoặc 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() chỉ in văn bản lỗi để stderr và xóa lỗi nên nó không thể là giải pháp
Tuyệt vời, đây chính xác là những gì tôi đã tìm kiếm ... hoạt động tuyệt vời. –
Điều này thật tuyệt. Tôi đã phát hiện trong một số trường hợp (đối với tôi, một tăng; python :: import của một cái gì đó không phải trong PYTHONPATH) ptraceback của tôi sẽ là 0, vì vậy tôi sẽ bảo vệ chống lại việc sử dụng ptraceback nếu nó là 0. Ngoài ra, bạn có thể bình luận về những gì chúng ta có thể làm với extype? Tôi cho rằng in văn bản của kiểu ngoại lệ python là có ý nghĩa. làm sao chúng ta làm việc đó bây giờ? –
Một câu hỏi bổ sung: chúng tôi có bị rò rỉ bộ nhớ ở trên không? Điều gì giải phóng các đối tượng được trả về bởi PyErr_Fetch? (Tôi không chắc chắn về cả hai CPython và boost :: pythoon trường hợp) – elmo