Skip to content

Commit f0fb782

Browse files
weijay0804gvanrossumkumaraditya303
authored
gh-105331: Change asyncio.sleep to raise `ValueError for nan (#105641)
Co-authored-by: Guido van Rossum <[email protected]> Co-authored-by: Kumar Aditya <[email protected]>
1 parent 9544948 commit f0fb782

File tree

4 files changed

+24
-0
lines changed

4 files changed

+24
-0
lines changed

Doc/library/asyncio-task.rst

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,9 @@ Sleeping
426426
.. versionchanged:: 3.10
427427
Removed the *loop* parameter.
428428

429+
.. versionchanged:: 3.13
430+
Raises :exc:`ValueError` if *delay* is :data:`~math.nan`.
431+
429432

430433
Running Tasks Concurrently
431434
==========================

Lib/asyncio/tasks.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import functools
1616
import inspect
1717
import itertools
18+
import math
1819
import types
1920
import warnings
2021
import weakref
@@ -646,6 +647,9 @@ async def sleep(delay, result=None):
646647
await __sleep0()
647648
return result
648649

650+
if math.isnan(delay):
651+
raise ValueError("Invalid delay: NaN (not a number)")
652+
649653
loop = events.get_running_loop()
650654
future = loop.create_future()
651655
h = loop.call_later(delay,

Lib/test/test_asyncio/test_tasks.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1609,6 +1609,21 @@ async def sleeper(dt, arg):
16091609
self.assertEqual(t.result(), 'yeah')
16101610
self.assertAlmostEqual(0.1, loop.time())
16111611

1612+
def test_sleep_when_delay_is_nan(self):
1613+
1614+
def gen():
1615+
yield
1616+
1617+
loop = self.new_test_loop(gen)
1618+
1619+
async def sleeper():
1620+
await asyncio.sleep(float("nan"))
1621+
1622+
t = self.new_task(loop, sleeper())
1623+
1624+
with self.assertRaises(ValueError):
1625+
loop.run_until_complete(t)
1626+
16121627
def test_sleep_cancel(self):
16131628

16141629
def gen():
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
Raise :exc:`ValueError` if the ``delay`` argument to :func:`asyncio.sleep` is a NaN (matching :func:`time.sleep`).
2+

0 commit comments

Comments
 (0)