Wie verwende ich die C-API und Ausnahmen von Python richtig?

wenn ich sowas mache

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

Ich erhalte sofort einen schwerwiegenden Fehler (einer, der die Programmausführung beenden würde, wenn er in einem vorab geschriebenen Skript enthalten wäre)

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

undx bleibt undefiniert:

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

Wie würde ich vorgehen, um das in Pythons C-API zu implementieren? Ich habe welche gefundenDokumentation dafür, aber ich bin nicht sicher, wie ich es richtig verwenden kann.

Folgendes habe ich versucht:

Drucken:

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

Dies gibt leider nur die Ausnahme aus und das Programm wird fortgesetzt. Außerdem - wenn ich es richtig verstehe -PyErr_Print() Entfernt die Ausnahme aus einer Art Warteschlange, sodass Python denkt, dass sie behandelt wird. So sieht es aus:

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

PyErr_Occurred():

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

Verhalten:

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

Also ist es schon spät ...

return PyErr_Occurred():

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

Verhalten:

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

Dieser ist einfach wirklich komisch.

Was muss ich tun, um das Verhalten der integrierten Funktionen zu ermitteln?

Bearbeiten: Ich habe versucht, was @ user2864740 in einem Kommentar vorgeschlagen und es hat perfekt funktioniert!

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage