Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Lib/test/test_time.py
Original file line number Diff line number Diff line change
Expand Up @@ -167,6 +167,12 @@ def test_sleep_exceptions(self):
self.assertRaises(ValueError, time.sleep, -1)
self.assertRaises(ValueError, time.sleep, -0.1)

# Improved exception #81267
with self.assertRaises(TypeError) as errmsg:
time.sleep([])
self.assertIn("integer or float", str(errmsg.exception))


def test_sleep(self):
for value in [-0.0, 0, 0.0, 1e-100, 1e-9, 1e-6, 1, 1.2]:
with self.subTest(value=value):
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Correct :func:`time.sleep` error message when an object that cannot be interpreted
as an integer or float is provided.
8 changes: 7 additions & 1 deletion Modules/timemodule.c
Original file line number Diff line number Diff line change
Expand Up @@ -398,8 +398,14 @@ time_sleep(PyObject *self, PyObject *timeout_obj)
}

PyTime_t timeout;
if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT))
if (_PyTime_FromSecondsObject(&timeout, timeout_obj, _PyTime_ROUND_TIMEOUT)) {
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
const char *type_name = Py_TYPE(timeout_obj)->tp_name;
PyObject* msg = PyUnicode_FromFormat("'%s' object cannot be interpreted as an integer or float", type_name);
PyErr_SetString(PyExc_TypeError, PyUnicode_AsUTF8(msg));
}
return NULL;
}
if (timeout < 0) {
PyErr_SetString(PyExc_ValueError,
"sleep length must be non-negative");
Expand Down
Loading