В настоящее время я пишу расширение С++ для Python с помощью Boost.Python. Функция в этом расширении может генерировать исключение, содержащее информацию об ошибке (за пределами просто читаемой человеком строки, описывающей, что произошло). Я надеялся, что смогу экспортировать это исключение в Python, чтобы я мог поймать его и сделать что-то с дополнительной информацией.
Например:
import my_cpp_module
try:
my_cpp_module.my_cpp_function()
except my_cpp_module.MyCPPException, e:
print e.my_extra_data
К сожалению, Boost.Python, похоже, переводит все исключения С++ (подклассы std::exception
) в RuntimeError
. Я понимаю, что Boost.Python позволяет реализовать пользовательский перевод исключений, однако нужно использовать PyErr_SetObject
, который принимает PyObject*
(для типа исключения) и PyObject*
(для значения исключения) - ни один из которых Я знаю, как добраться от моих классов Boost.Python. Возможно, есть способ (который был бы велик), которого я просто еще не нашел. В противном случае кто-нибудь знает, как экспортировать специальное исключение С++, чтобы я мог его поймать в Python?