1.10.4 NULL指针(NULL Pointers)
一般,带有对象引用参数的函数不希望你传递给它们NULL指针,如果你传递NULL指针,会产生内核转储(dump core)(或者导致后面发生转储)。返回对象引用的函数一般只在表示异常发生时返回NULL。不检查参数是否是NULL的原因是函数经常传递它们收到的对象给其他的函数-如果每个函数都去检查参数是否是NULL,那会有很多冗余检查,并且代码执行速度慢。
最好检查参数是否是NULL的地方是当接受的指针可能NULL’源头(source:)’,例如:在malloc()或在函数可能产生异常的地方。
Py_INCREF()和Py_DECREF()宏不检查NULL指针-然而,它们的变体Py_XINCREF()和Py_XDECREF()检查。
特定对象类型检查宏(Pytype_Check()
) 不检查NULL指针-也,那儿有更多,一排排,调用类型检查的代码,检查对象是否是几种不同的期望的类型,这也会产生冗余检查。没有变量为NULL的检查。
C函数调用机制确保传递到C函数的参数(如例子中的args
)永远不为NULL-事实上确保参数总是元组 1.4。
让NULL指针’逃跑’到Python用户那里是严重的错误。