Skip to content

bpo-42413: Replace concurrent.futures.TimeoutError and asyncio.TimeoutError with builtin TimeoutError #30197

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Dec 19, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 0 additions & 5 deletions Doc/library/asyncio-api-index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -203,11 +203,6 @@ Exceptions
:class: full-width-table


* - :exc:`asyncio.TimeoutError`
- Raised on timeout by functions like :func:`wait_for`.
Keep in mind that ``asyncio.TimeoutError`` is **unrelated**
to the built-in :exc:`TimeoutError` exception.

* - :exc:`asyncio.CancelledError`
- Raised when a Task is cancelled. See also :meth:`Task.cancel`.

Expand Down
9 changes: 5 additions & 4 deletions Doc/library/asyncio-exceptions.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,11 +13,12 @@ Exceptions

.. exception:: TimeoutError

The operation has exceeded the given deadline.
A deprecated alias of :exc:`TimeoutError`,
raised when the operation has exceeded the given deadline.

.. important::
This exception is different from the builtin :exc:`TimeoutError`
exception.
.. versionchanged:: 3.11

This class was made an alias of :exc:`TimeoutError`.


.. exception:: CancelledError
Expand Down
12 changes: 6 additions & 6 deletions Doc/library/asyncio-task.rst
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,7 @@ Timeouts
completes.

If a timeout occurs, it cancels the task and raises
:exc:`asyncio.TimeoutError`.
:exc:`TimeoutError`.

To avoid the task :meth:`cancellation <Task.cancel>`,
wrap it in :func:`shield`.
Expand Down Expand Up @@ -520,7 +520,7 @@ Timeouts
# Wait for at most 1 second
try:
await asyncio.wait_for(eternity(), timeout=1.0)
except asyncio.TimeoutError:
except TimeoutError:
print('timeout!')

asyncio.run(main())
Expand All @@ -532,7 +532,7 @@ Timeouts
.. versionchanged:: 3.7
When *aw* is cancelled due to a timeout, ``wait_for`` waits
for *aw* to be cancelled. Previously, it raised
:exc:`asyncio.TimeoutError` immediately.
:exc:`TimeoutError` immediately.

.. deprecated-removed:: 3.8 3.10
The ``loop`` parameter. This function has been implicitly getting the
Expand Down Expand Up @@ -561,7 +561,7 @@ Waiting Primitives
*timeout* (a float or int), if specified, can be used to control
the maximum number of seconds to wait before returning.

Note that this function does not raise :exc:`asyncio.TimeoutError`.
Note that this function does not raise :exc:`TimeoutError`.
Futures or Tasks that aren't done when the timeout occurs are simply
returned in the second set.

Expand Down Expand Up @@ -649,7 +649,7 @@ Waiting Primitives
Each coroutine returned can be awaited to get the earliest next
result from the iterable of the remaining awaitables.

Raises :exc:`asyncio.TimeoutError` if the timeout occurs before
Raises :exc:`TimeoutError` if the timeout occurs before
all Futures are done.

.. deprecated-removed:: 3.8 3.10
Expand Down Expand Up @@ -762,7 +762,7 @@ Scheduling From Other Threads

try:
result = future.result(timeout)
except concurrent.futures.TimeoutError:
except TimeoutError:
print('The coroutine took too long, cancelling the task...')
future.cancel()
except Exception as exc:
Expand Down
16 changes: 11 additions & 5 deletions Doc/library/concurrent.futures.rst
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ Executor Objects
* *func* is executed asynchronously and several calls to
*func* may be made concurrently.

The returned iterator raises a :exc:`concurrent.futures.TimeoutError`
The returned iterator raises a :exc:`TimeoutError`
if :meth:`~iterator.__next__` is called and the result isn't available
after *timeout* seconds from the original call to :meth:`Executor.map`.
*timeout* can be an int or a float. If *timeout* is not specified or
Expand Down Expand Up @@ -352,7 +352,7 @@ The :class:`Future` class encapsulates the asynchronous execution of a callable.
Return the value returned by the call. If the call hasn't yet completed
then this method will wait up to *timeout* seconds. If the call hasn't
completed in *timeout* seconds, then a
:exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
:exc:`TimeoutError` will be raised. *timeout* can be
an int or float. If *timeout* is not specified or ``None``, there is no
limit to the wait time.

Expand All @@ -366,7 +366,7 @@ The :class:`Future` class encapsulates the asynchronous execution of a callable.
Return the exception raised by the call. If the call hasn't yet
completed then this method will wait up to *timeout* seconds. If the
call hasn't completed in *timeout* seconds, then a
:exc:`concurrent.futures.TimeoutError` will be raised. *timeout* can be
:exc:`TimeoutError` will be raised. *timeout* can be
an int or float. If *timeout* is not specified or ``None``, there is no
limit to the wait time.

Expand Down Expand Up @@ -482,7 +482,7 @@ Module Functions
they complete (finished or cancelled futures). Any futures given by *fs* that
are duplicated will be returned once. Any futures that completed before
:func:`as_completed` is called will be yielded first. The returned iterator
raises a :exc:`concurrent.futures.TimeoutError` if :meth:`~iterator.__next__`
raises a :exc:`TimeoutError` if :meth:`~iterator.__next__`
is called and the result isn't available after *timeout* seconds from the
original call to :func:`as_completed`. *timeout* can be an int or float. If
*timeout* is not specified or ``None``, there is no limit to the wait time.
Expand All @@ -506,7 +506,13 @@ Exception classes

.. exception:: TimeoutError

Raised when a future operation exceeds the given timeout.
A deprecated alias of :exc:`TimeoutError`,
raised when a future operation exceeds the given timeout.

.. versionchanged:: 3.11

This class was made an alias of :exc:`TimeoutError`.


.. exception:: BrokenExecutor

Expand Down
3 changes: 1 addition & 2 deletions Lib/asyncio/exceptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,7 @@ class CancelledError(BaseException):
"""The Future or Task was cancelled."""


class TimeoutError(Exception):
"""The operation exceeded the given deadline."""
TimeoutError = TimeoutError # make local alias for the standard exception


class InvalidStateError(Exception):
Expand Down
4 changes: 1 addition & 3 deletions Lib/concurrent/futures/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -50,9 +50,7 @@ class CancelledError(Error):
"""The Future was cancelled."""
pass

class TimeoutError(Error):
"""The operation exceeded the given deadline."""
pass
TimeoutError = TimeoutError # make local alias for the standard exception

class InvalidStateError(Error):
"""The operation is not allowed in this state."""
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Replace ``concurrent.futures.TimeoutError`` and ``asyncio.TimeoutError``
with builtin :exc:`TimeoutError`, keep these names as deprecated aliases.