SWIG: создание исключений из Python для C ++ - PullRequest
0 голосов
/ 21 мая 2010

У нас есть интерфейс, который мы определили в C ++ (абстрактный класс, все функции чисто виртуальные), который будет расширен в Python. Чтобы преодолеть проблемы межъязыкового полиморфизма, мы планируем использовать SWIG Directors . Я читал, как отлавливать исключения, генерируемые из кода C ++, в нашем коде Python здесь , здесь , здесь и даже на SO .

Это довольно просто, и я не ожидаю проблем с обработкой собственных исключений нашей библиотеки. То, что я хотел бы знать и не могу найти в документации, - как заставить нашу реализацию Python расширенного интерфейса C ++ генерировать эти исключения C ++ таким образом, чтобы они были видимы для кода C ++.

Мы могли бы создавать небольшие функции в файлах * .i, чтобы каждая функция вызывала наши исключения:

void throw_myException(){ throw MyException; }

но мне интересно, как он будет взаимодействовать с кодом Python.

Кто-нибудь имеет опыт создания исключений C ++ из кода Python?

1 Ответ

2 голосов
/ 22 мая 2010

(C) Python написан на C. Кажется, что было бы плохо бросать исключения «через» интерпретатор.

Мне кажется, что, вероятно, безопаснее вернуть какой-то токен из вашего API, который может создать исключение через фабрику.

Это в основном то, что мы делаем здесь, хотя мы используем C # вместо Python для генерации данных «кода ошибки», которые затем переводятся на уровень C ++ и затем отправляются на фабрику исключений.

...