所以我只是追踪了我的Python程序中的一个奇怪的错误,这个错误是由于我将一个函数的参数混淆并错误地将True
传递给time.sleep()
。 Python似乎默默地将True
转换为1
docs说:
暂停执行指定的秒数。争论可能是 一个浮点数...
通常,Python很高兴在输入与预期类型或范围不匹配时抛出异常。为什么sleep
会将True
静默转换为数字?
答案 0 :(得分:6)
在python中,Bool
是int
>>> issubclass(bool, int)
True
以下是来自svn:http://svn.python.org/projects/python/trunk/Modules/timemodule.c
的来源 PyArg_ParseTuple
将arg转换为float
d:
说明符
static PyObject *
time_sleep(PyObject *self, PyObject *args)
{
double secs;
if (!PyArg_ParseTuple(args, "d:sleep", &secs))
return NULL;
if (floatsleep(secs) != 0)
return NULL;
Py_INCREF(Py_None);
return Py_None;
}