为什么time.sleep在传递True时不会抱怨?

ASh*_*lly 1 python sleep

所以我只是追踪我的Python程序中的一个奇怪的错误,这个错误是由于我将一个函数的参数混淆并错误地传递True给我time.sleep().Python似乎默默地转换True1

文件说:

暂停执行给定的秒数.参数可能是浮点数...

通常,当输入与预期的类型或范围不匹配时,Python很乐意抛出异常.为什么要sleep 静默转换True为数字?

Dae*_*yth 6

在python中,Bool是一个子类int

>>> issubclass(bool, int)
True
Run Code Online (Sandbox Code Playgroud)

这是svn的源代码:http://svn.python.org/projects/python/trunk/Modules/timemodule.c

PyArg_ParseTuplefloat使用说明d:符将arg转换为a

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;
}
Run Code Online (Sandbox Code Playgroud)

  • `True`的行为类似int`1`和`False`就像int`0`; 例如,`float(True)`是`1.0`,`"abc"[True]`是`"b"`,`sleep(True)`睡1秒钟. (2认同)