Skip to content

Commit

Permalink
gh-105331: Change asyncio.sleep to raise `ValueError for nan (#10…
Browse files Browse the repository at this point in the history
…5641)

Co-authored-by: Guido van Rossum <gvanrossum@gmail.com>
Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com>
  • Loading branch information
3 people committed Jun 12, 2023
1 parent 9544948 commit f0fb782
Show file tree
Hide file tree
Showing 4 changed files with 24 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Doc/library/asyncio-task.rst
Expand Up @@ -426,6 +426,9 @@ Sleeping
.. versionchanged:: 3.10
Removed the *loop* parameter.

.. versionchanged:: 3.13
Raises :exc:`ValueError` if *delay* is :data:`~math.nan`.


Running Tasks Concurrently
==========================
Expand Down
4 changes: 4 additions & 0 deletions Lib/asyncio/tasks.py
Expand Up @@ -15,6 +15,7 @@
import functools
import inspect
import itertools
import math
import types
import warnings
import weakref
Expand Down Expand Up @@ -646,6 +647,9 @@ async def sleep(delay, result=None):
await __sleep0()
return result

if math.isnan(delay):
raise ValueError("Invalid delay: NaN (not a number)")

loop = events.get_running_loop()
future = loop.create_future()
h = loop.call_later(delay,
Expand Down
15 changes: 15 additions & 0 deletions Lib/test/test_asyncio/test_tasks.py
Expand Up @@ -1609,6 +1609,21 @@ async def sleeper(dt, arg):
self.assertEqual(t.result(), 'yeah')
self.assertAlmostEqual(0.1, loop.time())

def test_sleep_when_delay_is_nan(self):

def gen():
yield

loop = self.new_test_loop(gen)

async def sleeper():
await asyncio.sleep(float("nan"))

t = self.new_task(loop, sleeper())

with self.assertRaises(ValueError):
loop.run_until_complete(t)

def test_sleep_cancel(self):

def gen():
Expand Down
@@ -0,0 +1,2 @@
Raise :exc:`ValueError` if the ``delay`` argument to :func:`asyncio.sleep` is a NaN (matching :func:`time.sleep`).

0 comments on commit f0fb782

Please sign in to comment.