https://github.com/python/cpython/commit/155c44b9015089eacc6e2ace449391c12bfb8b8d
commit: 155c44b9015089eacc6e2ace449391c12bfb8b8d
branch: main
author: Stan Ulbrych <[email protected]>
committer: vstinner <[email protected]>
date: 2025-03-12T08:12:57Z
summary:
gh-81267: Correct time.sleep() error message (#131055)
files:
A Misc/NEWS.d/next/Library/2025-03-10-20-23-00.gh-issue-81267.a39381.rst
M Lib/test/test_time.py
M Python/pytime.c
diff --git a/Lib/test/test_time.py b/Lib/test/test_time.py
index 1147997d8d86bf..cd6c08f183ff95 100644
--- a/Lib/test/test_time.py
+++ b/Lib/test/test_time.py
@@ -167,6 +167,11 @@ 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):
diff --git
a/Misc/NEWS.d/next/Library/2025-03-10-20-23-00.gh-issue-81267.a39381.rst
b/Misc/NEWS.d/next/Library/2025-03-10-20-23-00.gh-issue-81267.a39381.rst
new file mode 100644
index 00000000000000..9c9a86d30e2450
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2025-03-10-20-23-00.gh-issue-81267.a39381.rst
@@ -0,0 +1,2 @@
+Correct :func:`time.sleep` error message when an object that cannot be
interpreted
+as an integer or float is provided.
diff --git a/Python/pytime.c b/Python/pytime.c
index b10d5cf927b7e1..2ca92037c2e2f1 100644
--- a/Python/pytime.c
+++ b/Python/pytime.c
@@ -594,26 +594,30 @@ pytime_from_object(PyTime_t *tp, PyObject *obj,
_PyTime_round_t round,
}
return pytime_from_double(tp, d, round, unit_to_ns);
}
- else {
- long long sec = PyLong_AsLongLong(obj);
- if (sec == -1 && PyErr_Occurred()) {
- if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
- pytime_overflow();
- }
- return -1;
- }
- static_assert(sizeof(long long) <= sizeof(PyTime_t),
- "PyTime_t is smaller than long long");
- PyTime_t ns = (PyTime_t)sec;
- if (pytime_mul(&ns, unit_to_ns) < 0) {
+ long long sec = PyLong_AsLongLong(obj);
+ if (sec == -1 && PyErr_Occurred()) {
+ if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
pytime_overflow();
- return -1;
}
+ else if (PyErr_ExceptionMatches(PyExc_TypeError)) {
+ PyErr_Format(PyExc_TypeError,
+ "'%T' object cannot be interpreted as an integer or
float",
+ obj);
+ }
+ return -1;
+ }
- *tp = ns;
- return 0;
+ static_assert(sizeof(long long) <= sizeof(PyTime_t),
+ "PyTime_t is smaller than long long");
+ PyTime_t ns = (PyTime_t)sec;
+ if (pytime_mul(&ns, unit_to_ns) < 0) {
+ pytime_overflow();
+ return -1;
}
+
+ *tp = ns;
+ return 0;
}
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]