https://github.com/python/cpython/commit/155c44b9015089eacc6e2ace449391c12bfb8b8d
commit: 155c44b9015089eacc6e2ace449391c12bfb8b8d
branch: main
author: Stan Ulbrych <89152624+stanfromirel...@users.noreply.github.com>
committer: vstinner <vstin...@python.org>
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 -- python-checkins@python.org
To unsubscribe send an email to python-checkins-le...@python.org
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: arch...@mail-archive.com

Reply via email to