本章节中描述的函数将让您处理和引发 Python 异常。理解一些 Python 异常处理的基础知识很重要。它的工作原理有点像 POSIX
errno
变量:最后发生的错误有全局指示器 (每线程)。大多数 C API 函数不会清零它当成功时,但会设置它以指示出错原因当失败时。大多数 C API 函数还返回错误指示器,通常是
NULL
若它们应返回指针,或者
-1
若他们返回整数 (例外:
PyArg_*()
函数返回
1
对于成功和
0
对于故障)。
具体来说,错误指示器由 3 对象指针组成:异常类型、异常值及回溯对象。这些指针中的任何一个都可以是 NULL 若未设置 (尽管某些组合是禁止,例如:不可以有非 NULL 回溯若异常类型为 NULL)。
当函数因调用的某个函数失败而必须失败时,一般不设置错误指示器;它调用的函数已有设置。它负责处理错误和清零异常或在清理它保持的任何资源后返回 (譬如:对象引用或内存分配);它应该 not 继续通常,若不准备处理错误。若由于错误而返回,重要的是向调用者指示有设置错误。若错误未被处理或被小心谨慎地传播,对 Python/C API 的额外调用可能没有如打算般的行为,且可能以神秘方式失败。
注意
错误指示器是
not
结果对于
sys.exc_info()
。前者相当于尚未被捕获的异常 (因此仍在传播),而后者返回被捕获后的异常 (因此已停止传播)。
PyErr_Clear
(
)
¶
清零错误指示器。若未设置错误指示器,则没有效果。
PyErr_PrintEx
(
int
set_sys_last_vars
)
¶
将标准回溯打印到
sys.stderr
并清零错误指示器。仅当错误指示器有设置时才调用此函数。(否则会导致致命错误!)
若
set_sys_last_vars
非零,变量
sys.last_type
,
sys.last_value
and
sys.last_traceback
将被分别设为打印异常的类型、值及回溯。
PyErr_Print
(
)
¶
别名化的
PyErr_PrintEx(1)
.
这些函数帮助您设置当前线程的错误指示器。为方便起见,其中一些函数将始终返回 NULL 指针为用于
return
语句。
PyErr_SetString
(
PyObject
*type
, const char
*message
)
¶
这是设置错误指示器的最常见方式。首个自变量指定异常类型;它通常是标准异常之一,如
PyExc_RuntimeError
。不需要递增其引用计数。第 2 自变量是错误信息;解码自
'utf-8
’.
PyErr_SetObject
(
PyObject
*type
,
PyObject
*value
)
¶
此函数类似于
PyErr_SetString()
但允许您为异常值指定任意 Python 对象。
PyErr_Format
(
PyObject
*exception
, const char
*format
, ...
)
¶
此函数设置错误指示器并返回
NULL
.
exception
应该是 Python 异常类。
format
和后续参数帮助格式化错误消息;它们拥有相同的意义和值如在
PyUnicode_FromFormat()
.
format
是 ASCII 编码字符串。
PyErr_FormatV
(
PyObject
*exception
, const char
*format
, va_list
vargs
)
¶
如同
PyErr_Format()
,但接受
va_list
自变量而不是可变数自变量。
3.5 版新增。
PyErr_BadArgument
(
)
¶
这是简写的
PyErr_SetString(PyExc_TypeError,
message)
,其中
message
indicates that a built-in operation was invoked with an illegal argument. It is mostly for internal use.
PyErr_NoMemory
(
)
¶
这是简写的
PyErr_SetNone(PyExc_MemoryError)
;它返回
NULL
因此对象分配函数可以写
return
PyErr_NoMemory();
当耗尽内存时。
PyErr_SetFromErrno
(
PyObject
*type
)
¶
这是方便函数以当 C 库函数返回错误时引发异常和设置 C 变量
errno
. It constructs a tuple object whose first item is the integer
errno
value and whose second item is the corresponding error message (gotten from
strerror()
), and then calls
PyErr_SetObject(type,
object)
. On Unix, when the
errno
value is
EINTR
, indicating an interrupted system call, this calls
PyErr_CheckSignals()
, and if that set the error indicator, leaves it set to that. The function always returns
NULL
, so a wrapper function around a system call can write
return
PyErr_SetFromErrno(type);
when the system call returns an error.
PyErr_SetFromErrnoWithFilenameObject
(
PyObject
*type
,
PyObject
*filenameObject
)
¶
类似
PyErr_SetFromErrno()
, with the additional behavior that if
filenameObject
不是
NULL
, it is passed to the constructor of
type
as a third parameter. In the case of
OSError
exception, this is used to define the
filename
attribute of the exception instance.
PyErr_SetFromErrnoWithFilenameObjects
(
PyObject
*type
,
PyObject
*filenameObject
,
PyObject
*filenameObject2
)
¶
类似
PyErr_SetFromErrnoWithFilenameObject()
, but takes a second filename object, for raising errors when a function that takes two filenames fails.
3.4 版新增。
PyErr_SetFromErrnoWithFilename
(
PyObject
*type
, const char
*filename
)
¶
类似
PyErr_SetFromErrnoWithFilenameObject()
, but the filename is given as a C string.
filename
is decoded from the filesystem encoding (
os.fsdecode()
).
PyErr_SetFromWindowsErr
(
int
ierr
)
¶
这是方便函数以引发
WindowsError
. If called with
ierr
of
0
, the error code returned by a call to
GetLastError()
is used instead. It calls the Win32 function
FormatMessage()
to retrieve the Windows description of error code given by
ierr
or
GetLastError()
, then it constructs a tuple object whose first item is the
ierr
value and whose second item is the corresponding error message (gotten from
FormatMessage()
), and then calls
PyErr_SetObject(PyExc_WindowsError,
object)
. This function always returns
NULL
. Availability: Windows.
PyErr_SetExcFromWindowsErr
(
PyObject
*type
, int
ierr
)
¶
类似
PyErr_SetFromWindowsErr()
, with an additional parameter specifying the exception type to be raised. Availability: Windows.
PyErr_SetFromWindowsErrWithFilename
(
int
ierr
, const char
*filename
)
¶
类似
PyErr_SetFromWindowsErrWithFilenameObject()
, but the filename is given as a C string.
filename
is decoded from the filesystem encoding (
os.fsdecode()
). Availability: Windows.
PyErr_SetExcFromWindowsErrWithFilenameObject
(
PyObject
*type
, int
ierr
,
PyObject
*filename
)
¶
类似
PyErr_SetFromWindowsErrWithFilenameObject()
, with an additional parameter specifying the exception type to be raised. Availability: Windows.
PyErr_SetExcFromWindowsErrWithFilenameObjects
(
PyObject
*type
, int
ierr
,
PyObject
*filename
,
PyObject
*filename2
)
¶
类似
PyErr_SetExcFromWindowsErrWithFilenameObject()
,但接受第 2 文件名对象。可用性:Windows。
3.4 版新增。
PyErr_SetExcFromWindowsErrWithFilename
(
PyObject
*type
, int
ierr
, const char
*filename
)
¶
类似
PyErr_SetFromWindowsErrWithFilename()
, with an additional parameter specifying the exception type to be raised. Availability: Windows.
PyErr_SetImportError
(
PyObject
*msg
,
PyObject
*name
,
PyObject
*path
)
¶
这是方便函数以引发
ImportError
.
msg
will be set as the exception’s message string.
name
and
path
, both of which can be
NULL
, will be set as the
ImportError
’s respective
name
and
path
属性。
3.3 版新增。
PyErr_SyntaxLocationObject
(
PyObject
*filename
, int
lineno
, int
col_offset
)
¶
Set file, line, and offset information for the current exception. If the current exception is not a
SyntaxError
, then it sets additional attributes, which make the exception printing subsystem think the exception is a
SyntaxError
.
3.4 版新增。
PyErr_SyntaxLocationEx
(
const char
*filename
, int
lineno
, int
col_offset
)
¶
像
PyErr_SyntaxLocationObject()
,但
filename
is a byte string decoded from the filesystem encoding (
os.fsdecode()
).
3.2 版新增。
PyErr_SyntaxLocation
(
const char
*filename
, int
lineno
)
¶
像
PyErr_SyntaxLocationEx()
,但省略 col_offset 参数。
PyErr_BadInternalCall
(
)
¶
这是简写的
PyErr_SetString(PyExc_SystemError,
message)
,其中
message
indicates that an internal operation (e.g. a Python/C API function) was invoked with an illegal argument. It is mostly for internal use.
Use these functions to issue warnings from C code. They mirror similar functions exported by the Python
warnings
module. They normally print a warning message to
sys.stderr
; however, it is also possible that the user has specified that warnings are to be turned into errors, and in that case they will raise an exception. It is also possible that the functions raise an exception because of a problem with the warning machinery. The return value is
0
if no exception is raised, or
-1
if an exception is raised. (It is not possible to determine whether a warning message is actually printed, nor what the reason is for the exception; this is intentional.) If an exception is raised, the caller should do its normal exception handling (for example,
Py_DECREF()
owned references and return an error value).
PyErr_WarnEx
(
PyObject
*category
, const char
*message
, Py_ssize_t
stack_level
)
¶
Issue a warning message. The
category
argument is a warning category (see below) or
NULL
; the
message
argument is a UTF-8 encoded string.
stack_level
is a positive number giving a number of stack frames; the warning will be issued from the currently executing line of code in that stack frame. A
stack_level
of 1 is the function calling
PyErr_WarnEx()
, 2 is the function above that, and so forth.
Warning categories must be subclasses of
PyExc_Warning
;
PyExc_Warning
是子类对于
PyExc_Exception
; the default warning category is
PyExc_RuntimeWarning
. The standard Python warning categories are available as global variables whose names are enumerated at
标准警告类别
.
For information about warning control, see the documentation for the
warnings
module and the
-W
option in the command line documentation. There is no C API for warning control.
PyErr_SetImportErrorSubclass
(
PyObject
*msg
,
PyObject
*name
,
PyObject
*path
)
¶
Much like
PyErr_SetImportError()
but this function allows for specifying a subclass of
ImportError
to raise.
3.6 版新增。
PyErr_WarnExplicitObject
(
PyObject
*category
,
PyObject
*message
,
PyObject
*filename
, int
lineno
,
PyObject
*module
,
PyObject
*registry
)
¶
Issue a warning message with explicit control over all warning attributes. This is a straightforward wrapper around the Python function
warnings.warn_explicit()
, see there for more information. The
模块
and
registry
arguments may be set to
NULL
to get the default effect described there.
3.4 版新增。
PyErr_WarnExplicit
(
PyObject
*category
, const char
*message
, const char
*filename
, int
lineno
, const char
*module
,
PyObject
*registry
)
¶
类似
PyErr_WarnExplicitObject()
除了
message
and
模块
are UTF-8 encoded strings, and
filename
is decoded from the filesystem encoding (
os.fsdecode()
).
PyErr_WarnFormat
(
PyObject
*category
, Py_ssize_t
stack_level
, const char
*format
, ...
)
¶
函数类似于
PyErr_WarnEx()
,但使用
PyUnicode_FromFormat()
to format the warning message.
format
是 ASCII 编码字符串。
3.2 版新增。
PyErr_ResourceWarning
(
PyObject
*source
, Py_ssize_t
stack_level
, const char
*format
, ...
)
¶
函数类似于
PyErr_WarnFormat()
,但
category
is
ResourceWarning
和传递
source
to
warnings.WarningMessage()
.
3.6 版新增。
PyErr_Occurred
(
)
¶
测试是否有设置错误指示器。若有设置,返回异常
type
(首自变量到最后一次调用的一
PyErr_Set*()
函数或到
PyErr_Restore()
)。若未设置,返回
NULL
。不拥有对返回值的引用,因此不需要
Py_DECREF()
它。
注意
不要将返回值与特定异常进行比较;使用
PyErr_ExceptionMatches()
代替,如下所示。(比较可能很易失败,因为异常可能是实例而不是类,在类异常的情况下,或它可能是期望异常的子类。)
PyErr_ExceptionMatches
(
PyObject
*exc
)
¶
相当于
PyErr_GivenExceptionMatches(PyErr_Occurred(),
exc)
。这才应该被调用当有实际设置异常时;会发生内存访问违反若没有引发异常。
PyErr_GivenExceptionMatches
(
PyObject
*given
,
PyObject
*exc
)
¶
返回 True 若 given 异常匹配异常类型在 exc 。若 exc 是类对象,这还返回 True 当 given 是子类的实例。若 exc 是元组,元组 (及子元组递归) 中的所有异常类型都会匹配搜索。
PyErr_Fetch
(
PyObject
**ptype
,
PyObject
**pvalue
,
PyObject
**ptraceback
)
¶
Retrieve the error indicator into three variables whose addresses are passed. If the error indicator is not set, set all three variables to NULL . If it is set, it will be cleared and you own a reference to each object retrieved. The value and traceback object may be NULL even when the type object is not.
注意
This function is normally only used by code that needs to catch exceptions or by code that needs to save and restore the error indicator temporarily, e.g.:
{
PyObject *type, *value, *traceback;
PyErr_Fetch(&type, &value, &traceback);
/* ... code that might produce other errors ... */
PyErr_Restore(type, value, traceback);
}
PyErr_Restore
(
PyObject
*type
,
PyObject
*value
,
PyObject
*traceback
)
¶
Set the error indicator from the three objects. If the error indicator is already set, it is cleared first. If the objects are NULL , the error indicator is cleared. Do not pass a NULL type and non- NULL value or traceback. The exception type should be a class. Do not pass an invalid exception type or value. (Violating these rules will cause subtle problems later.) This call takes away a reference to each object: you must own a reference to each object before the call and after the call you no longer own these references. (If you don’t understand this, don’t use this function. I warned you.)
注意
This function is normally only used by code that needs to save and restore the error indicator temporarily. Use
PyErr_Fetch()
to save the current error indicator.
PyErr_NormalizeException
(
PyObject
**exc,
PyObject
**val,
PyObject
**tb
)
¶
在某些情况下,值的返回通过
PyErr_Fetch()
below can be “unnormalized”, meaning that
*exc
是类对象但
*val
is not an instance of the same class. This function can be used to instantiate the class in that case. If the values are already normalized, nothing happens. The delayed normalization is implemented to improve performance.
注意
This function
does not
implicitly set the
__traceback__
attribute on the exception value. If setting the traceback appropriately is desired, the following additional snippet is needed:
if (tb != NULL) {
PyException_SetTraceback(val, tb);
}
PyErr_GetExcInfo
(
PyObject
**ptype
,
PyObject
**pvalue
,
PyObject
**ptraceback
)
¶
检索异常信息,已知来自
sys.exc_info()
. This refers to an exception that was
already caught
, not to an exception that was freshly raised. Returns new references for the three objects, any of which may be
NULL
。不修改异常信息状态。
注意
This function is not normally used by code that wants to handle exceptions. Rather, it can be used when code needs to save and restore the exception state temporarily. Use
PyErr_SetExcInfo()
to restore or clear the exception state.
3.3 版新增。
PyErr_SetExcInfo
(
PyObject
*type
,
PyObject
*value
,
PyObject
*traceback
)
¶
设置异常信息,作为已知来自
sys.exc_info()
. This refers to an exception that was
already caught
, not to an exception that was freshly raised. This function steals the references of the arguments. To clear the exception state, pass
NULL
for all three arguments. For general rules about the three arguments, see
PyErr_Restore()
.
注意
This function is not normally used by code that wants to handle exceptions. Rather, it can be used when code needs to save and restore the exception state temporarily. Use
PyErr_GetExcInfo()
to read the exception state.
3.3 版新增。
PyErr_CheckSignals
(
)
¶
This function interacts with Python’s signal handling. It checks whether a signal has been sent to the processes and if so, invokes the corresponding signal handler. If the
signal
module is supported, this can invoke a signal handler written in Python. In all cases, the default effect for
SIGINT
is to raise the
KeyboardInterrupt
exception. If an exception is raised the error indicator is set and the function returns
-1
;否则函数返回
0
. The error indicator may or may not be cleared if it was previously set.
PyErr_SetInterrupt
(
)
¶
This function simulates the effect of a
SIGINT
signal arriving — the next time
PyErr_CheckSignals()
is called,
KeyboardInterrupt
will be raised. It may be called without holding the interpreter lock.
PySignal_SetWakeupFd
(
int
fd
)
¶
This utility function specifies a file descriptor to which the signal number is written as a single byte whenever a signal is received. fd must be non-blocking. It returns the previous such file descriptor.
值
-1
disables the feature; this is the initial state. This is equivalent to
signal.set_wakeup_fd()
in Python, but without any error checking.
fd
should be a valid file descriptor. The function should only be called from the main thread.
3.5 版改变: 在 Windows,函数现在还支持套接字句柄。
PyErr_NewException
(
const char
*name
,
PyObject
*base
,
PyObject
*dict
)
¶
此实用函数创建并返回新的异常类。
name
自变量必须是新异常的名称,C 字符串形式
module.classname
。
base
and
dict
自变量通常为
NULL
。这创建的类对象派生自
Exception
(在 C 中可访问按
PyExc_Exception
).
__module__
attribute of the new class is set to the first part (up to the last dot) of the
name
argument, and the class name is set to the last part (after the last dot). The
base
argument can be used to specify alternate base classes; it can either be only one class or a tuple of classes. The
dict
argument can be used to specify a dictionary of class variables and methods.
PyErr_NewExceptionWithDoc
(
const char
*name
, const char
*doc
,
PyObject
*base
,
PyObject
*dict
)
¶
如同
PyErr_NewException()
, except that the new exception class can easily be given a docstring: If
doc
为非
NULL
, it will be used as the docstring for the exception class.
3.2 版新增。
PyException_GetTraceback
(
PyObject
*ex
)
¶
Return the traceback associated with the exception as a new reference, as accessible from Python through
__traceback__
. If there is no traceback associated, this returns
NULL
.
PyException_GetContext
(
PyObject
*ex
)
¶
Return the context (another exception instance during whose handling
ex
was raised) associated with the exception as a new reference, as accessible from Python through
__context__
. If there is no context associated, this returns
NULL
.
PyException_SetContext
(
PyObject
*ex
,
PyObject
*ctx
)
¶
Set the context associated with the exception to ctx 。使用 NULL to clear it. There is no type check to make sure that ctx is an exception instance. This steals a reference to ctx .
PyException_GetCause
(
PyObject
*ex
)
¶
返回原因 (异常实例,或
None
, set by
raise
...
from
...
) associated with the exception as a new reference, as accessible from Python through
__cause__
.
PyException_SetCause
(
PyObject
*ex
,
PyObject
*cause
)
¶
Set the cause associated with the exception to
cause
。使用
NULL
to clear it. There is no type check to make sure that
cause
is either an exception instance or
None
. This steals a reference to
cause
.
__suppress_context__
被隐式设为
True
通过此函数。
The following functions are used to create and modify Unicode exceptions from C.
PyUnicodeDecodeError_Create
(
const char
*encoding
, const char
*object
, Py_ssize_t
length
, Py_ssize_t
start
, Py_ssize_t
end
, const char
*reason
)
¶
创建
UnicodeDecodeError
object with the attributes
encoding
,
object
,
length
,
start
,
end
and
reason
.
encoding
and
reason
are UTF-8 encoded strings.
PyUnicodeEncodeError_Create
(
const char
*encoding
, const
Py_UNICODE
*object
, Py_ssize_t
length
, Py_ssize_t
start
, Py_ssize_t
end
, const char
*reason
)
¶
创建
UnicodeEncodeError
object with the attributes
encoding
,
object
,
length
,
start
,
end
and
reason
.
encoding
and
reason
are UTF-8 encoded strings.
PyUnicodeTranslateError_Create
(
const
Py_UNICODE
*object
, Py_ssize_t
length
, Py_ssize_t
start
, Py_ssize_t
end
, const char
*reason
)
¶
创建
UnicodeTranslateError
object with the attributes
object
,
length
,
start
,
end
and
reason
.
reason
is a UTF-8 encoded string.
PyUnicodeDecodeError_GetEncoding
(
PyObject
*exc
)
¶
PyUnicodeEncodeError_GetEncoding
(
PyObject
*exc
)
¶
返回 encoding 属性为给定异常对象。
PyUnicodeDecodeError_GetObject
(
PyObject
*exc
)
¶
PyUnicodeEncodeError_GetObject
(
PyObject
*exc
)
¶
PyUnicodeTranslateError_GetObject
(
PyObject
*exc
)
¶
返回 object 属性为给定异常对象。
PyUnicodeDecodeError_GetStart
(
PyObject
*exc
, Py_ssize_t
*start
)
¶
PyUnicodeEncodeError_GetStart
(
PyObject
*exc
, Py_ssize_t
*start
)
¶
PyUnicodeTranslateError_GetStart
(
PyObject
*exc
, Py_ssize_t
*start
)
¶
获取
start
attribute of the given exception object and place it into
*start
.
start
必须不是
NULL
。返回
0
当成功时,
-1
当故障时。
PyUnicodeDecodeError_SetStart
(
PyObject
*exc
, Py_ssize_t
start
)
¶
PyUnicodeEncodeError_SetStart
(
PyObject
*exc
, Py_ssize_t
start
)
¶
PyUnicodeTranslateError_SetStart
(
PyObject
*exc
, Py_ssize_t
start
)
¶
设置
start
attribute of the given exception object to
start
。返回
0
当成功时,
-1
当故障时。
PyUnicodeDecodeError_GetEnd
(
PyObject
*exc
, Py_ssize_t
*end
)
¶
PyUnicodeEncodeError_GetEnd
(
PyObject
*exc
, Py_ssize_t
*end
)
¶
PyUnicodeTranslateError_GetEnd
(
PyObject
*exc
, Py_ssize_t
*end
)
¶
获取
end
attribute of the given exception object and place it into
*end
.
end
必须不是
NULL
。返回
0
当成功时,
-1
当故障时。
PyUnicodeDecodeError_SetEnd
(
PyObject
*exc
, Py_ssize_t
end
)
¶
PyUnicodeEncodeError_SetEnd
(
PyObject
*exc
, Py_ssize_t
end
)
¶
PyUnicodeTranslateError_SetEnd
(
PyObject
*exc
, Py_ssize_t
end
)
¶
设置
end
attribute of the given exception object to
end
。返回
0
当成功时,
-1
当故障时。
PyUnicodeDecodeError_GetReason
(
PyObject
*exc
)
¶
PyUnicodeEncodeError_GetReason
(
PyObject
*exc
)
¶
PyUnicodeTranslateError_GetReason
(
PyObject
*exc
)
¶
返回 reason 属性为给定异常对象。
PyUnicodeDecodeError_SetReason
(
PyObject
*exc
, const char
*reason
)
¶
PyUnicodeEncodeError_SetReason
(
PyObject
*exc
, const char
*reason
)
¶
PyUnicodeTranslateError_SetReason
(
PyObject
*exc
, const char
*reason
)
¶
设置
reason
attribute of the given exception object to
reason
。返回
0
当成功时,
-1
当故障时。
These two functions provide a way to perform safe recursive calls at the C level, both in the core and in extension modules. They are needed if the recursive code does not necessarily invoke Python code (which tracks its recursion depth automatically).
Py_EnterRecursiveCall
(
const char
*where
)
¶
Marks a point where a recursive C-level call is about to be performed.
若
USE_STACKCHECK
is defined, this function checks if the OS stack overflowed using
PyOS_CheckStack()
. In this is the case, it sets a
MemoryError
and returns a nonzero value.
The function then checks if the recursion limit is reached. If this is the case, a
RecursionError
is set and a nonzero value is returned. Otherwise, zero is returned.
where
should be a string such as
"
in
instance
check"
to be concatenated to the
RecursionError
message caused by the recursion depth limit.
Py_LeaveRecursiveCall
(
)
¶
Ends a
Py_EnterRecursiveCall()
. Must be called once for each
successful
invocation of
Py_EnterRecursiveCall()
.
Properly implementing
tp_repr
for container types requires special recursion handling. In addition to protecting the stack,
tp_repr
also needs to track objects to prevent cycles. The following two functions facilitate this functionality. Effectively, these are the C equivalent to
reprlib.recursive_repr()
.
Py_ReprEnter
(
PyObject
*object
)
¶
Called at the beginning of the
tp_repr
implementation to detect cycles.
If the object has already been processed, the function returns a positive integer. In that case the
tp_repr
implementation should return a string object indicating a cycle. As examples,
dict
objects return
{...}
and
list
objects return
[...]
.
The function will return a negative integer if the recursion limit is reached. In that case the
tp_repr
implementation should typically return
NULL
.
Otherwise, the function returns zero and the
tp_repr
implementation can continue normally.
Py_ReprLeave
(
PyObject
*object
)
¶
Ends a
Py_ReprEnter()
. Must be called once for each invocation of
Py_ReprEnter()
返回 0。
All standard Python exceptions are available as global variables whose names are
PyExc_
followed by the Python exception name. These have the type
PyObject*
; they are all class objects. For completeness, here are all the variables:
| C 名称 | Python 名称 | 注意事项 |
|---|---|---|
PyExc_BaseException
|
BaseException
|
(1) |
PyExc_Exception
|
Exception
|
(1) |
PyExc_ArithmeticError
|
ArithmeticError
|
(1) |
PyExc_AssertionError
|
AssertionError
|
|
PyExc_AttributeError
|
AttributeError
|
|
PyExc_BlockingIOError
|
BlockingIOError
|
|
PyExc_BrokenPipeError
|
BrokenPipeError
|
|
PyExc_BufferError
|
BufferError
|
|
PyExc_ChildProcessError
|
ChildProcessError
|
|
PyExc_ConnectionAbortedError
|
ConnectionAbortedError
|
|
PyExc_ConnectionError
|
ConnectionError
|
|
PyExc_ConnectionRefusedError
|
ConnectionRefusedError
|
|
PyExc_ConnectionResetError
|
ConnectionResetError
|
|
PyExc_EOFError
|
EOFError
|
|
PyExc_FileExistsError
|
FileExistsError
|
|
PyExc_FileNotFoundError
|
FileNotFoundError
|
|
PyExc_FloatingPointError
|
FloatingPointError
|
|
PyExc_GeneratorExit
|
GeneratorExit
|
|
PyExc_ImportError
|
ImportError
|
|
PyExc_IndentationError
|
IndentationError
|
|
PyExc_IndexError
|
IndexError
|
|
PyExc_InterruptedError
|
InterruptedError
|
|
PyExc_IsADirectoryError
|
IsADirectoryError
|
|
PyExc_KeyError
|
KeyError
|
|
PyExc_KeyboardInterrupt
|
KeyboardInterrupt
|
|
PyExc_LookupError
|
LookupError
|
(1) |
PyExc_MemoryError
|
MemoryError
|
|
PyExc_ModuleNotFoundError
|
ModuleNotFoundError
|
|
PyExc_NameError
|
NameError
|
|
PyExc_NotADirectoryError
|
NotADirectoryError
|
|
PyExc_NotImplementedError
|
NotImplementedError
|
|
PyExc_OSError
|
OSError
|
(1) |
PyExc_OverflowError
|
OverflowError
|
|
PyExc_PermissionError
|
PermissionError
|
|
PyExc_ProcessLookupError
|
ProcessLookupError
|
|
PyExc_RecursionError
|
RecursionError
|
|
PyExc_ReferenceError
|
ReferenceError
|
(2) |
PyExc_RuntimeError
|
RuntimeError
|
|
PyExc_StopAsyncIteration
|
StopAsyncIteration
|
|
PyExc_StopIteration
|
StopIteration
|
|
PyExc_SyntaxError
|
SyntaxError
|
|
PyExc_SystemError
|
SystemError
|
|
PyExc_SystemExit
|
SystemExit
|
|
PyExc_TabError
|
TabError
|
|
PyExc_TimeoutError
|
TimeoutError
|
|
PyExc_TypeError
|
TypeError
|
|
PyExc_UnboundLocalError
|
UnboundLocalError
|
|
PyExc_UnicodeDecodeError
|
UnicodeDecodeError
|
|
PyExc_UnicodeEncodeError
|
UnicodeEncodeError
|
|
PyExc_UnicodeError
|
UnicodeError
|
|
PyExc_UnicodeTranslateError
|
UnicodeTranslateError
|
|
PyExc_ValueError
|
ValueError
|
|
PyExc_ZeroDivisionError
|
ZeroDivisionError
|
3.3 版新增:
PyExc_BlockingIOError
,
PyExc_BrokenPipeError
,
PyExc_ChildProcessError
,
PyExc_ConnectionError
,
PyExc_ConnectionAbortedError
,
PyExc_ConnectionRefusedError
,
PyExc_ConnectionResetError
,
PyExc_FileExistsError
,
PyExc_FileNotFoundError
,
PyExc_InterruptedError
,
PyExc_IsADirectoryError
,
PyExc_NotADirectoryError
,
PyExc_PermissionError
,
PyExc_ProcessLookupError
and
PyExc_TimeoutError
were introduced following
PEP 3151
.
3.5 版新增:
PyExc_StopAsyncIteration
and
PyExc_RecursionError
.
3.6 版新增:
PyExc_ModuleNotFoundError
.
这些是兼容性别名化的
PyExc_OSError
:
| C 名称 | 注意事项 |
|---|---|
PyExc_EnvironmentError
|
|
PyExc_IOError
|
|
PyExc_WindowsError
|
(3) |
3.3 版改变: 这些别名用于单独异常类型。
注意事项:
weakref.ReferenceError
.
MS_WINDOWS
is defined.
All standard Python warning categories are available as global variables whose names are
PyExc_
followed by the Python exception name. These have the type
PyObject*
; they are all class objects. For completeness, here are all the variables:
| C 名称 | Python 名称 | 注意事项 |
|---|---|---|
PyExc_Warning
|
警告
|
(1) |
PyExc_BytesWarning
|
BytesWarning
|
|
PyExc_DeprecationWarning
|
DeprecationWarning
|
|
PyExc_FutureWarning
|
FutureWarning
|
|
PyExc_ImportWarning
|
ImportWarning
|
|
PyExc_PendingDeprecationWarning
|
PendingDeprecationWarning
|
|
PyExc_ResourceWarning
|
ResourceWarning
|
|
PyExc_RuntimeWarning
|
RuntimeWarning
|
|
PyExc_SyntaxWarning
|
SyntaxWarning
|
|
PyExc_UnicodeWarning
|
UnicodeWarning
|
|
PyExc_UserWarning
|
UserWarning
|
3.2 版新增:
PyExc_ResourceWarning
.
注意事项: