所以我只是在我的Python程序中追踪了一个奇怪的错误,这个错误是由于我混淆了函数的参数并且错误地将True
传递给time.sleep()
而导致的。蟒蛇似乎无声地转换True
到1
为什么time.sleep在传递True时没有抱怨?
的docs说:
暂停为给定秒数执行。参数可能是 浮点数...
通常,Python很高兴在输入与预期类型或范围不匹配时抛出异常。为什么sleep
默默地将True
转换为数字?
所以我只是在我的Python程序中追踪了一个奇怪的错误,这个错误是由于我混淆了函数的参数并且错误地将True
传递给time.sleep()
而导致的。蟒蛇似乎无声地转换True
到1
为什么time.sleep在传递True时没有抱怨?
的docs说:
暂停为给定秒数执行。参数可能是 浮点数...
通常,Python很高兴在输入与预期类型或范围不匹配时抛出异常。为什么sleep
默默地将True
转换为数字?
在蟒蛇,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;
}
'bool'是**所有支持'bool'的**版本的'int'的子类。与Java不同,Python不会回避'True'和'False'为数值。任何接受整数和'time.sleep'的地方都必须接受bools。 – user4815162342
你说得对,我不知道这是对py3k也 – Daenyth
需要注意的是,从数字区分的bool语言经常这样做的实际原因,比如做'如果(富= 3)'错误的情况下。 Python不存在这个问题,因为分配无论如何都不是有效的表达式。 – user4815162342
是'睡眠“这是唯一的功能吗?或者其他功能默默地将'True'转换为数字? – nhgrif