1.10.4 Punteros NULL

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.



Notas al pie

... tupla1.5
Estas garantías se pierden si se usa la convención de llamadas ``antigua'', que se encuentra a menudo en código heredado.

Ver Sobre este documento... para obtener información sobre sugerencias.