SWIG: сообщение об исключениях Python из кода C ++ - PullRequest
6 голосов
/ 27 января 2011

Я использую библиотеку, которая указывает в своих документах API для определения класса, унаследованного от некоторого конкретного класса библиотеки.Сама библиотека написана на C ++, а привязки к Python генерируются с помощью SWIG.Проблема в том, что когда я запускаю свой код Python, независимо от того, какое исключение выдает Python, я получаю сообщение об ошибке «завершается вызовом после создания экземпляра« Swig :: DirectorMethodException »».это исключение вызвано кодом Python, о котором будет сообщено при выполнении моей программы.Esp, те случаи, когда я получаю ZeroDivisionError.

Я попытался немного взломать, следуя методу, описанному в документации SWIG на http://www.swig.org/Doc2.0/Python.html#Python_nn36, но безуспешно.Я по-прежнему получаю одно и то же сообщение «terminate вызывается после создания экземпляра Swig :: DirectorMethodException», независимо от того, что я помещаю в файл module.i.об этой проблеме, чтобы об исключениях Python сообщалось как есть?

Ответы [ 2 ]

2 голосов
/ 24 июля 2013

Сообщить об исключении, вызванном Python в консоли программы.

Это полезное исправление от Madhusudan.C.S. Смотрите его комментарий к ответу Джинбота. Я ставлю это как ответ, чтобы оно стало более заметным.

/* MyInterface.i */
%module(directors="1") MyInterface
%feature("director:except") {
    if( $error != NULL ) {
        PyObject *ptype, *pvalue, *ptraceback;
        PyErr_Fetch( &ptype, &pvalue, &ptraceback );
        PyErr_Restore( ptype, pvalue, ptraceback );
        PyErr_Print();
        Py_Exit(1);
    }
} 
1 голос
/ 14 июня 2011

Я не знаю, как далеко вы продвинулись с вашей базой кода, так что это может быть мало полезно, но мне повезло больше с boost :: python , чем SWIG ,Тогда вы можете сделать это: boost :: python Export Custom Exception

...