Skip to content

Commit 1b6348a

Browse files
Initial
1 parent 36ef3bf commit 1b6348a

File tree

3 files changed

+15
-1
lines changed

3 files changed

+15
-1
lines changed

Lib/test/test_time.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,12 @@ def test_sleep_exceptions(self):
167167
self.assertRaises(ValueError, time.sleep, -1)
168168
self.assertRaises(ValueError, time.sleep, -0.1)
169169

170+
# Improved exception #81267
171+
with self.assertRaises(TypeError) as errmsg:
172+
time.sleep([])
173+
self.assertIn("integer or float", str(errmsg.exception))
174+
175+
170176
def test_sleep(self):
171177
for value in [-0.0, 0, 0.0, 1e-100, 1e-9, 1e-6, 1, 1.2]:
172178
with self.subTest(value=value):
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Correct :func:`time.sleep` error message when an object that cannot be interpreted
2+
as an integer or float is provided.

Modules/timemodule.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,8 +398,14 @@ time_sleep(PyObject *self, PyObject *timeout_obj)
398398
}
399399

400400
PyTime_t timeout;
401-
if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT))
401+
if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT)) {
402+
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
403+
const char *type_name = Py_TYPE(timeout_obj)->tp_name;
404+
PyObject* msg = PyUnicode_FromFormat("'%s' object cannot be interpreted as an integer or float", type_name);
405+
PyErr_SetString(PyExc_TypeError, PyUnicode_AsUTF8(msg));
406+
}
402407
return NULL;
408+
}
403409
if (timeout < 0) {
404410
PyErr_SetString(PyExc_ValueError,
405411
"sleep length must be non-negative");

0 commit comments

Comments
 (0)