Как правильно использовать API и исключения API Python?

если я сделаю что-то вроде

>>> x = int(1,2,3,4,5) 

Я сразу получаю фатальную ошибку (та, которая закончила бы выполнение программы, если она была в предварительно написанном скрипте)

  Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: int() takes at most 2 arguments (5 given) 

и x остается неопределенным:

  >>> x Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'x' is not defined 

Как я могу реализовать это в API Python? Я нашел для него документацию , но я не уверен, что знаю, как правильно ее использовать.

Вот что я пытался:

  1. Распечатать:

     if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); PyErr_Print(); } 

    Это, к сожалению, только печатает исключение, и программа продолжается. Кроме того, если я его правильно PyErr_Print() удаляет исключение из какой-то очереди, поэтому Python считает, что он обрабатывается. Вот как это выглядит:

     >>> import awesomemod >>> x = awesomemod.thing() TypeError: Oh no! >>> x # x is defined because the function returns None eventually >>> 
  2. PyErr_Occurred() :

     if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); PyErr_Occurred(); } 

    Поведение:

     >>> import awesomemod >>> awesomemod.thing() >>> TypeError: Oh no! >>> 

    Так что это вроде как поздно …

  3. return PyErr_Occurred() :

     if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); return PyErr_Occurred(); } 

    Поведение:

     >>> import awesomemod >>> awesomemod.thing() <type 'exceptions.TypeError'> >>> TypeError: Oh no! 

    Это просто странно.

Что мне нужно сделать, чтобы получить поведение встроенных функций?

Редактировать: я пробовал, что @ user2864740 предложил в комментарии, и это сработало отлично!

  if(something) { PyErr_SetString(PyExc_TypeError, "Oh no!"); return (PyObject *) NULL; } 

One Solution collect form web for “Как правильно использовать API и исключения API Python?”

Получение исключения в C выполняется путем установки объекта исключения или строки и последующего возврата NULL из функции.

Interesting Posts

Несколько проектов из одного setup.py?

как установить pygame на Mac 10.6.8, установив python 2.7.9

ftps.storlines socket.timeout, несмотря на завершение загрузки файлов

проблемы с установкой M2Crypto на Mint

Как определить и удалить деревья трассировки из nltk.trees?

Парсинг BeautifulSoup 3.1 слишком легко ломается

как разбить итерируемый в куски постоянного размера

Создание нулевого заполненного кадра данных панд

Вход в систему не работает при запуске приложения для пирамиды в uWSGI в режиме императора

Как проверить, если заданная метка времени находится в секундах или миллисекундах?

Обслуживание статических файлов с помощью mod_wsgi и Django

Получение Tor ControlPort для работы

Дублирование журнала при использовании модуля протоколирования Python

Отсутствует модуль «шесть» для астрометрии после использования cx_freeze / py2exe

Максимальный размер для многопроцессорной обработки.

Python - лучший язык программирования в мире.