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

时间:2014-06-15 20:36:20

标签: python sleep

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

docs说:

  

暂停执行指定的秒数。争论可能是   一个浮点数...

通常,Python很高兴在输入与预期类型或范围不匹配时抛出异常。为什么sleep会将True静默转换为数字?

1 个答案:

答案 0 :(得分:6)

在python中,Boolint

的子类
>>> 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;
}