这些函数可以从 C 代码中发出警告。它们仿照了由 Python 模块 warnings 导出的那些函数。它们通常向 sys.stderr 打印一条警告信息;当然,用户也有可能已经指定将警告转换为错误,在这种情况下,它们将触发异常。也有可能由于警告机制出现问题,使得函数触发异常。如果没有触发异常,返回值为 0 ;如果触发异常,返回值为 -1。(无法确定是否实际打印了警告信息,也无法确定异常触发的原因。这是故意为之)。如果触发了异常,调用者应该进行正常的异常处理(例如,Py_DECREF() 持有引用并返回一个错误值)。
int PyErr_WarnEx(PyObject *category, const char *message, Py_ssize_t stack_level)
属于 稳定 ABI.
发出一个警告信息。参数 category 是一个警告类别(见下面)或 NULL ; message 是一个 UTF-8 编码的字符串。 stack_level 是一个给出栈帧数量的正数;警告将从该栈帧中当前正在执行的代码行发出。 stack_level 为 1 的是调用 PyErr_WarnEx() 的函数,2 是在此之上的函数,以此类推。
警告类别必须是 PyExc_Warning 的子类, PyExc_Warning 是 PyExc_Exception 的子类;默认警告类别是 PyExc_RuntimeWarning 。标准 Python 警告类别作为全局变量可用,所有其名称见 标准警告类别 。
有关警告控制的信息,参见模块文档 warnings 和命令行文档中的 -W 选项。没有用于警告控制的 C API。
int PyErr_WarnExplicitObject(PyObject *category, PyObject *message, PyObject *filename, int lineno, PyObject *module, PyObject *registry)
发出一个对所有警告属性进行显式控制的警告消息。 这是位于 Python 函数 warnings.warn_explicit() 外层的直接包装;请查看其文档了解详情。 module 和 registry 参数可被设为 NULL 以得到相关文档所描述的默认效果。
在 3.4 版本加入.
int PyErr_WarnExplicit(PyObject *category, const char *message, const char *filename, int lineno, const char *module, PyObject *registry)
属于 稳定 ABI.
类似于 PyErr_WarnExplicitObject() 不过 message 和 module 是 UTF-8 编码的字符串,而 filename 是由 filesystem encoding and error handler 解码的。
int PyErr_WarnFormat(PyObject *category, Py_ssize_t stack_level, const char *format, ...)
属于 稳定 ABI.
类似于 PyErr_WarnEx() 的函数,但使用 PyUnicode_FromFormat() 来格式化警告消息。 format 是使用 ASCII 编码的字符串。
在 3.2 版本加入.
int PyErr_ResourceWarning(PyObject *source, Py_ssize_t stack_level, const char *format, ...)
属于 稳定 ABI 自 3.6 版开始.
类似于 PyErr_WarnFormat() 的函数,但 category 是 ResourceWarning 并且它会将 source 传给 warnings.WarningMessage()。
在 3.6 版本加入. |