所以我只是在我的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