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):
}
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;
}