¿Cómo uso apropiadamente la API C de Python y las excepciones?

si hago algo como

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

Inmediatamente recibo un error fatal (uno que terminaría con la ejecución del progtwig si estuviera en un script escrito previamente)

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

y x permanece indefinido:

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

¿Cómo podría implementar eso en la API C de Python? Encontré algo de documentación para ello, pero no estoy seguro de saber cómo usarlo correctamente.

Esto es lo que he estado intentando:

  1. Impresión:

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

    Esto, desafortunadamente, solo imprime la excepción y el progtwig continúa. Además, —si lo comprendo correctamente—, PyErr_Print() elimina la excepción de algún tipo de cola, por lo que Python piensa que se maneja. Esto es lo que parece:

     >>> 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(); } 

    Comportamiento:

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

    Así que lo hace un poco tarde …

  3. return PyErr_Occurred() :

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

    Comportamiento:

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

    Este es realmente extraño.

¿Qué debo hacer para obtener el comportamiento de las funciones integradas?

Edición: ¡Probé lo que @ user2864740 sugirió en un comentario y funcionó perfectamente!

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

El aumento de una excepción en C se realiza al establecer el objeto o cadena de excepción y luego devolver NULL desde la función.