Unicode 异常对象
以下函数用于创建和修改Unicode异常。
- PyObject *PyUnicodeDecodeError_Create(const char *encoding, const char *object, Py_ssize_t length,Py_ssize_t start, Py_ssize_t end, const char *reason)
返回值:新引用。这是稳定的ABI的一部分。创建一个具有属性编码、对象、长度、开始、结束和原因的单单码解码错误对象。编码和原因是UTF-8编码的字符串。 - PyObject *PyUnicodeDecodeError_GetEncoding(PyObject *exc)
- PyObject *PyUnicodeEncodeError_GetEncoding(PyObject *exc)
返回值:新引用。这是稳定的ABI的一部分。返回给定异常对象的编码属性 - PyObject *PyUnicodeDecodeError_GetObject(PyObject *exc)
- PyObject *PyUnicodeEncodeError_GetObject(PyObject *exc)
- PyObject *PyUnicodeTranslateError_GetObject(PyObject *exc)
返回值:新引用。这是稳定的ABI的一部分。返回给定异常对象的对象属性 - int PyUnicodeDecodeError_GetStart(PyObject *exc, Py_ssize_t *start)
- int PyUnicodeEncodeError_GetStart(PyObject *exc, Py_ssize_t *start)
- int PyUnicodeTranslateError_GetStart(PyObject *exc, Py_ssize_t start)
这是稳定的ABI的一部分。获取给定异常对象的start属性,并将其放入start中。启动值不能为空。成功时返回0,失败时返回1。 - int PyUnicodeDecodeError_SetStart(PyObject *exc, Py_ssize_t start)
- int PyUnicodeEncodeError_SetStart(PyObject *exc, Py_ssize_t start)
- int PyUnicodeTranslateError_SetStart(PyObject *exc, Py_ssize_t start)
这是稳定的ABI的一部分。将给定的异常对象的启动属性设置为要启动。成功时返回0,失败时返回1。 - int PyUnicodeDecodeError_GetEnd(PyObject *exc, Py_ssize_t *end)
- int PyUnicodeEncodeError_GetEnd(PyObject *exc, Py_ssize_t *end)
- int PyUnicodeTranslateError_GetEnd(PyObject *exc, Py_ssize_t end)
这是稳定的ABI的一部分。获取给定的异常对象的end属性,并将其放入end中。结束值不能为NULL。成功时返回0,失败时返回1。 - int PyUnicodeDecodeError_SetEnd(PyObject *exc, Py_ssize_t end)
- int PyUnicodeEncodeError_SetEnd(PyObject *exc, Py_ssize_t end)
- int PyUnicodeTranslateError_SetEnd(PyObject *exc, Py_ssize_t end)
这是稳定的ABI的一部分。将给定的异常对象的end属性设置为end。成功时返回0,失败时返回1。 - PyObject *PyUnicodeDecodeError_GetReason(PyObject *exc)
- PyObject *PyUnicodeEncodeError_GetReason(PyObject *exc)
- PyObject *PyUnicodeTranslateError_GetReason(PyObject *exc)
返回值:新引用。这是稳定的ABI的一部分。返回给定异常对象的原因属性 - int PyUnicodeDecodeError_SetReason(PyObject *exc, const char *reason)
- int PyUnicodeEncodeError_SetReason(PyObject *exc, const char *reason)
- int PyUnicodeTranslateError_SetReason(PyObject *exc, const char *reason)
这是稳定的ABI的一部分。将给定的异常对象的原因属性设置为原因。成功时返回0,失败时返回1。
递归控制
这两个函数提供了一种在核心模块和扩展模块上执行安全递归调用的方法。如果递归代码不一定调用Python代码(它会自动跟踪其递归深度),则需要这些代码。tp_call实现也不需要它们,因为调用协议负责递归处理。
- int Py_EnterRecursiveCall(const char *where)
自3.9版本以来的稳定ABI的一部分。标记一个即将执行递归c级调用的点。如果定义了 USE_STACKCHECK,此函数会使用PyOS_CheckStack() 来检查操作系统堆栈是否溢出。在这种情况下,它将设置一个 MemoryError 并返回非零值。
然后,该函数将检查是否达到了递归极限。如果是这种情况,则设置一个递归错误,并返回一个非零值。
否则,将返回零。其中应该是一个UTF-8编码的字符串,如“实例检查”,将连接到由递归深度限制引起的递归错误消息。
在3.9版更改:这个函数现在也可以在有限的API中使用。 - void Py_LeaveRecursiveCall(void)
自3.9版本以来的稳定ABI的一部分。结束一个Py_EnterRecursiveCall()。每次成功调用Py_EnterRecursiveCall()时,都必须调用一次。在3.9版更改:这个函数现在也可以在有限的API中使用。
正确地实现容器类型的tp_repr需要特殊的递归处理。除了保护堆栈之外,tp_repr还需要跟踪对象,以防止循环。以下两个功能促进了此功能。实际上,这些都是C,相当于reprlib.recursive_repr()。
- int Py_ReprEnter(PyObject *object)
这是稳定的ABI的一部分。在tp_repr实现开始时调用来检测周期。如果该对象已经被处理过,则该函数将返回一个正整数。在这种情况下,tp_repr实现应该返回一个指示一个循环的字符串对象。例如,dict对象返回{…},而list对象返回[…]。如果达到了递归极限,则该函数将返回一个负整数。在这种情况下,tp_repr实现通常应该返回NULL。否则,函数返回零,tp_repr实现可以正常继续。 - void Py_ReprLeave(PyObject *object)
这是稳定的ABI的一部分。结束一个Py_ReprEnter()。对于每次调用一个返回零的Py_ReprEnter(),都必须调用一次。
标准异常
所有的 Python 标准异常都可用作全局变量,其名称为 PyExc_ 跟上 Python 异常名称。这些变量是 PyObject*类型;都是类对象。下面列出了全部这些用作标准异常的变量:
标准警告类别
所有的标准 Python 警告类别都可以用作全局变量,其名称为 “PyExc_“ 跟上 Python 异常名称。这些变量是PyObject* 类型;都是类对象。以下列出了所有用作警告的变量: