En general, las funciones que toman referencias a objetos como argumentos no esperan que se les pasen punteros NULL, y harán que el intérprete casque si se hace. Las funciones que devuelven referencias a objetos suelen devolver NULL sólo si quieren indicar que ha ocurrido una excepción. La razón para no comprobar los argumentos NULL es que las funciones pasan a menudo los objetos que reciben a otra función. Si cada función tuviera que comprobar los NULL, habría una gran cantidad de comprobaciones redundantes, que ralentizarían el código.
Es mejor comprobar los NULL sólo en el ``origen'', es decir, cuando se recibe un puntero que pudiera ser nulo, en malloc() o desde una función que pueda lanzar una excepción.
Las macros Py_INCREF() y Py_DECREF() no comprueban los punteros NULL. Sin embargo, sí lo hacen sus hermanas Py_XINCREF() y Py_XDECREF().
Las macros que verifican el tipo de objeto
(Pytype_Check()
) no comprueban si los punteros son
NULL. De nuevo, hay mucho código que llama a éstas en fila
para comprobar diferentes tipos esperados, lo que causaría comprobaciones
redundantes. No hay versiones con comprobación de NULL.
El mecanismo de llamada a función de C garantiza que la lista de argumentos
pasados a funciones C (args
en los ejemplos) nunca es
NULL y, de hecho, garantiza que siempre es una
tupla1.5.
Es un error grave dejar que un puntero NULL se ``escape'' hasta el usuario de Python.