gpt4 book ai didi

python - Python 异常中错误编号的含义

转载 作者:太空狗 更新时间:2023-10-29 21:03:26 26 4
gpt4 key购买 nike

在一些愚蠢的计算之后捕获 Python 的 OverflowError,我检查了错误的 args 并看到它是一个包含整数作为其第一个坐标的元组。我假设这是某种错误编号 (errno)。但是,我找不到它的任何文档或引用。

例子:

try:
1e4**100
except OverflowError as ofe:
print ofe.args

## prints '(34, 'Numerical result out of range')'

您知道 34 在此上下文中的含义吗?您知道此异常的其他可能错误编号吗?

最佳答案

标准库中有一个模块叫做errno :

This module makes available standard errno system symbols. The value of each symbol is the corresponding integer value. The names and descriptions are borrowed from linux/include/errno.h, which should be pretty all-inclusive.

/usr/include/linux/errno.h 包括 /usr/include/asm/errno.h 其中包括 /usr/include/asm-通用/errno-base.h

me@my_pc:~$ cat /usr/include/asm-generic/errno-base.h | grep 34
#define ERANGE 34 /* Math result not representable */

现在我们知道 34 错误代码代表 ERANGE。

1e4**100float_pow function 处理来自 Object/floatobject.c .该函数的部分源代码:

static PyObject *
float_pow(PyObject *v, PyObject *w, PyObject *z)
{
// 107 lines omitted

if (errno != 0) {
/* We do not expect any errno value other than ERANGE, but
* the range of libm bugs appears unbounded.
*/
PyErr_SetFromErrno(errno == ERANGE ? PyExc_OverflowError :
PyExc_ValueError);
return NULL;
}
return PyFloat_FromDouble(ix);
}

因此,1e4**100 导致 ERANGE 错误(导致 PyExc_OverflowError),然后引发更高级别的 OverflowError 异常。

关于python - Python 异常中错误编号的含义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22955720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com