Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

boost/python/exception_translator.hpp

Boost , Boost.Python Reference Manual , Chapter 2. High Level Components

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

Как описаноздесь, важно убедиться, что исключения, выброшенные кодом C++, не переходят в ядро интерпретатора Python. По умолчанию, Boost. Python переводит все исключения C++, выброшенные завернутыми функциями и функциями ввода модулей в Python, но переводчики по умолчанию чрезвычайно ограничены: большинство исключений C++ появятся в Python как исключениеRuntimeError, представление которого является «Исключением C++, которое невозможно идентифицировать». Чтобы создавать лучшие сообщения об ошибках, пользователи могут зарегистрировать дополнительные переводчики исключений, как описано ниже.

template<class ExceptionType, class Translate>
void register_exception_translator(Translate translate);

Requires

Перевод является CopyConstructible, и следующий код должен быть хорошо сформирован:

void f(ExceptionType x) { translate(x); }

. Выражение<translate(x)>должно либо отбросить исключение C++, либо последующий призыв к<PyErr_Occurred()>должен вернуться 1.

Effects

Добавляет копию перевода в последовательность исключений переводчиков, опробованных при бусте. Python улавливает исключение, которое скоро перейдет в основной интерпретатор Python. Новый переводчик получит «первый шанс» на перевод всех исключений, соответствующих вышеприведенному пункту улова. Любому впоследствии зарегистрированному переводчику будет разрешено перевести это исключение раньше. Переводчик, который не может перевести данное исключение C++, может перебросить его, и он будет обрабатываться переводчиком, который был зарегистрирован ранее (или переводчиком по умолчанию).

#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
#include <boost/python/exception_translator.hpp>
#include <exception>
struct my_exception : std::exception
{
  char const* what() throw() { return "One of my exceptions"; }
};
void translate(my_exception const& e)
{
    // Use the Python 'C' API to set up an exception object
    PyErr_SetString(PyExc_RuntimeError, e.what());
}
void something_which_throws()
{
    ...
    throw my_exception();
    ...
}
BOOST_PYTHON_MODULE(exception_translator_ext)
{
  using namespace boost::python;
  register_exception_translator<my_exception>(&translate);
  def("something_which_throws", something_which_throws);
}

PrevUpHomeNext

Статья boost/python/exception_translator.hpp раздела Boost.Python Reference Manual Chapter 2. High Level Components может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 2. High Level Components ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 20:43:19/0.0064699649810791/0