字符串转换和格式化

用于数字转换和格式化字符串输出的Function。

PyOS_snprintf()PyOS_vsnprintf()包装标准 C 库函数snprintf()vsnprintf()。它们的目的是保证在极端情况下的一致行为,而标准 C 函数则不这样做。

包装器确保返回时* str * [* size * -1]始终为'\0'。他们向 str 中写入的字节数绝不超过* size *个字节(包括结尾的'\0')。这两个函数都要求str != NULLsize > 0format != NULL

如果平台没有vsnprintf(),并且避免截断所需的缓冲区大小超过* size *超过 512 个字节,则 Python 会以Py_FatalError()中止。

这些函数的返回值(* rv *)应该解释如下:

以下函数提供了与语言环境无关的字符串到数字的转换。

如果endptrNULL,则转换整个字符串。如果字符串不是浮点数的有效表示形式,请加ValueError并返回-1.0

如果 endptr 不是NULL,请转换尽可能多的字符串,并将*endptr设置为指向第一个未转换的字符。如果字符串的起始段都不是浮点数的有效表示形式,则将*endptr设置为指向字符串的开头,引发 ValueError 并返回-1.0

如果s表示的值太大而无法存储在浮点数中(例如"1e500"在许多平台上都是这样的字符串),则如果overflow_exceptionNULL则返回Py_HUGE_VAL(带有适当的符号)并且不要设置任何异常。否则,overflow_exception必须指向 Python 异常对象。引发该异常并返回-1.0。在两种情况下,都将*endptr设置为指向转换后的值后的第一个字符。

如果在转换过程中发生任何其他错误(例如,内存不足错误),请设置适当的 Python 异常并返回-1.0

3.1 版中的新Function。

如果* ptype 不是NULL,则它指向的值将设置为Py_DTST_FINITEPy_DTST_INFINITEPy_DTST_NAN之一,表示 val *分别是有限数,无限数或非数字。

返回值是指向* buffer *的指针,该指针带有转换后的字符串;如果转换失败,则返回NULL。调用者负责pass调用PyMem_Free()释放返回的字符串。

3.1 版中的新Function。

首页