Skip to content

asyncio.sleep(float('nan')) does not raise ValueError #105331

Closed
@jakkdl

Description

@jakkdl

Bug report

time.sleep(float('nan')) raises ValueError, but asyncio.sleep(float('nan')) is valid and sleeps for 0. This seems bad, and asyncio.sleep should probably also raise ValueError.

import asyncio
import time

try:
    time.sleep(float('nan'))
except ValueError:
    print("time.sleep raised ValueError")

async def foo() -> None:
    await asyncio.sleep(float('nan'))
    print("asyncio.sleep does not raise any error")

asyncio.run(foo())
$ python foo.py
time.sleep raised ValueError
asyncio.sleep does not raise any error

time.sleep and asyncio.sleep do differ in behaviour when it comes to negative numbers and changing that behaviour was considered a breaking change without strong reason: #83879
nan feels like it should very rare to be passed intentionally, but the potential gain might also be small enough that this isn't worth fixing.

Related: python-trio/trio#2493

Your environment

  • CPython versions tested on: 3.8 to 3.11
  • Operating system and architecture: Linux 6.3.4-arch1-1

Linked PRs

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    Status

    Done

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions