LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 301|回复: 0

python 抛出异常

[复制链接]
发表于 2024-1-22 18:25:29 | 显示全部楼层 |阅读模式

抛出异常
这些函数可帮助你设置当前线程的错误指示器。为了方便起见,一些函数将始终返回 NULL 指针,以便用于 return 语句。

void PyErr_SetString(PyObject *type, const char *message)
属于 稳定 ABI.
这是设置错误指示器最常用的方式。 第一个参数指定异常类型;它通常为某个标准异常,例如 PyExc_RuntimeError。 你无需为其创建新的 strong reference (例如使用 Py_INCREF())。 第二个参数是一条错误消息;它是用 'utf-8' 解码的。

void PyErr_SetObject(PyObject *type, PyObject *value)
属于 稳定 ABI.
此函数类似于 PyErr_SetString(),但是允许你为异常的“值”指定任意一个 Python 对象。

PyObject *PyErr_Format(PyObject *exception, const char *format, ...)
返回值:总是为 NULL。 属于 稳定 ABI.
这个函数设置了一个错误指示器并且返回了 NULL,exception 应当是一个 Python 中的异常类。format 和随后的形参会帮助格式化这个错误的信息;它们与 PyUnicode_FromFormat() 有着相同的含义和值。format 是一个ASCII编码的字符串。

PyObject *PyErr_FormatV(PyObject *exception, const char *format, va_list vargs)
返回值:总是为 NULL。 属于 稳定 ABI 自 3.5 版开始.
和 PyErr_Format() 相同,但它接受一个 va_list 类型的参数而不是可变数量的参数集。

在 3.5 版本加入.

void PyErr_SetNone(PyObject *type)
属于 稳定 ABI.
这是 PyErr_SetObject(type, Py_None) 的简写。

int PyErr_BadArgument()
属于 稳定 ABI.
这是 PyErr_SetString(PyExc_TypeError, message) 的简写,其中 message 指出使用了非法参数调用内置操作。它主要用于内部使用。

PyObject *PyErr_NoMemory()
返回值:总是为 NULL。 属于 稳定 ABI.
这是 PyErr_SetNone(PyExc_MemoryError) 的简写;它返回 NULL ,以便当内存耗尽时,对象分配函数可以写 return PyErr_NoMemory(); 。

PyObject *PyErr_SetFromErrno(PyObject *type)
返回值:总是为 NULL。 属于 稳定 ABI.
这是一个便捷函数,当在 C 库函数返回错误并设置 C 变量 errno 时它会引发一个异常。 它构造了一个元组对象,其第一项是整数值 errno 而第二项是对应的错误信息(从 strerror() 获取),然后调用 PyErr_SetObject(type, object)。 在 Unix 上,当 errno 的值为 EINTR 时,表示有一个中断的系统调用,这将会调用 PyErr_CheckSignals(),如果它设置了错误指示符,则让其保持该设置。 该函数总是返回 NULL,因此当系统调用返回错误时该系统调用的包装函数可以写入 return PyErr_SetFromErrno(type);。

PyObject *PyErr_SetFromErrnoWithFilenameObject(PyObject *type, PyObject *filenameObject)
返回值:总是为 NULL。 属于 稳定 ABI.
与 PyErr_SetFromErrno() 类似,但如果 filenameObject 不为 NULL,它将作为第三个参数传递给 type 的构造函数。 在 OSError 异常的情况下,它将被用于定义异常实例的 filename 属性。

PyObject *PyErr_SetFromErrnoWithFilenameObjects(PyObject *type, PyObject *filenameObject, PyObject *filenameObject2)
返回值:总是为 NULL。 属于 稳定 ABI 自 3.7 版开始.
类似于 PyErr_SetFromErrnoWithFilenameObject() ,但接受第二个 filename 对象,用于当一个接受两个 filename 的函数失败时触发错误。

在 3.4 版本加入.

PyObject *PyErr_SetFromErrnoWithFilename(PyObject *type, const char *filename)
返回值:总是为 NULL。 属于 稳定 ABI.
类似于 PyErr_SetFromErrnoWithFilenameObject(),但文件名以 C 字符串形式给出。 filename 是用 filesystem encoding and error handler 解码的。

PyObject *PyErr_SetFromWindowsErr(int ierr)
返回值:总是为 NULL。 属于 稳定 ABI on Windows 自 3.7 版开始.
这是一个用于引发 WindowsError 的便捷函数。 如果在调用传传入的 ierr 值为 0,则会改用对 GetLastError() 的调用所返回的错误代码。 它将调用 Win32 函数 FormatMessage() 来获取 ierr 或 GetLastError() 所给出的错误代码的 Windows 描述,然后构造一个元组对象,其第一项为 ierr 值而第二项为相应的错误消息(从 FormatMessage() 获取),然后调用 PyErr_SetObject(PyExc_WindowsError, object)。 该函数将总是返回 NULL。

可用性: Windows。

PyObject *PyErr_SetExcFromWindowsErr(PyObject *type, int ierr)
返回值:总是为 NULL。 属于 稳定 ABI on Windows 自 3.7 版开始.
类似于 PyErr_SetFromWindowsErr() ,额外的参数指定要触发的异常类型。

可用性: Windows。

PyObject *PyErr_SetFromWindowsErrWithFilename(int ierr, const char *filename)
返回值:总是为 NULL。 属于 稳定 ABI on Windows 自 3.7 版开始.
与 PyErr_SetFromWindowsErr() 类似,额外的不同点是如果 filename 不为 NULL ,则会使用文件系统编码格式 (os.fsdecode()) 进行解码并作为第三个参数传递给 OSError 的构造器用于定义异常实例的 filename 属性。

可用性: Windows。

PyObject *PyErr_SetExcFromWindowsErrWithFilenameObject(PyObject *type, int ierr, PyObject *filename)
返回值:总是为 NULL。 属于 稳定 ABI on Windows 自 3.7 版开始.
与 PyErr_SetExcFromWindowsErr() 类似,额外的不同点是如果 filename 不为 NULL,它将作为第三个参数传递给 OSError 的构造器用于定义异常实例的 filename 属性。

可用性: Windows。

PyObject *PyErr_SetExcFromWindowsErrWithFilenameObjects(PyObject *type, int ierr, PyObject *filename, PyObject *filename2)
返回值:总是为 NULL。 属于 稳定 ABI on Windows 自 3.7 版开始.
类似于 PyErr_SetExcFromWindowsErrWithFilenameObject() ,但是接受第二个 filename 对象。

可用性: Windows。

在 3.4 版本加入.

PyObject *PyErr_SetExcFromWindowsErrWithFilename(PyObject *type, int ierr, const char *filename)
返回值:总是为 NULL。 属于 稳定 ABI on Windows 自 3.7 版开始.
类似于 PyErr_SetFromWindowsErrWithFilename() ,额外参数指定要触发的异常类型。

可用性: Windows。

PyObject *PyErr_SetImportError(PyObject *msg, PyObject *name, PyObject *path)
返回值:总是为 NULL。 属于 稳定 ABI 自 3.7 版开始.
这是触发 ImportError 的便捷函数。 msg 将被设为异常的消息字符串。 name 和 path ,(都可以为 NULL ),将用来被设置 ImportError 对应的属性 name 和 path。

在 3.3 版本加入.

PyObject *PyErr_SetImportErrorSubclass(PyObject *exception, PyObject *msg, PyObject *name, PyObject *path)
返回值:总是为 NULL。 属于 稳定 ABI 自 3.6 版开始.
和 PyErr_SetImportError() 很类似,但这个函数允许指定一个 ImportError 的子类来触发。

在 3.6 版本加入.

void PyErr_SyntaxLocationObject(PyObject *filename, int lineno, int col_offset)
设置当前异常的文件,行和偏移信息。如果当前异常不是 SyntaxError ,则它设置额外的属性,使异常打印子系统认为异常是 SyntaxError。

在 3.4 版本加入.

void PyErr_SyntaxLocationEx(const char *filename, int lineno, int col_offset)
属于 稳定 ABI 自 3.7 版开始.
类似于 PyErr_SyntaxLocationObject(),但 filename 是用 filesystem encoding and error handler 解码的字节串。

在 3.2 版本加入.

void PyErr_SyntaxLocation(const char *filename, int lineno)
属于 稳定 ABI.
类似于 PyErr_SyntaxLocationEx(),但省略了 col_offset parameter 形参。

void PyErr_BadInternalCall()
属于 稳定 ABI.
这是 PyErr_SetString(PyExc_SystemError, message) 的缩写,其中 message 表示使用了非法参数调用内部操作(例如,Python/C API 函数)。它主要用于内部使用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表