Skip to content

WIP: Always pass errno argument for OSError subclasses - #109720

Draft
serhiy-storchaka wants to merge 3 commits into
python:mainfrom
serhiy-storchaka:errno-for-oserror-subclasses
Draft

WIP: Always pass errno argument for OSError subclasses#109720
serhiy-storchaka wants to merge 3 commits into
python:mainfrom
serhiy-storchaka:errno-for-oserror-subclasses

Conversation

@serhiy-storchaka

Copy link
Copy Markdown
Member

It solves #109601, but covers not only TimeoutError, but other OSError subclasses.

With #109714 these changes will be unneeded (except that some calls may be improved to set filename), because errno and strerror will be set automatically. This PR is a demonstration of changes when do it explicitly. #109714 be accepted and we decide to apply these changes to older versions, this PR will be converted in a backport PR.

@github-actions

Copy link
Copy Markdown

This PR is stale because it has been open for 30 days with no activity.

@github-actions github-actions Bot added the stale Stale PR or inactive for long period of time. label Apr 14, 2026
serhiy-storchaka and others added 2 commits August 26, 2026 22:59
# Conflicts:
#	Lib/asyncio/tasks.py
#	Lib/asyncio/timeouts.py
#	Lib/importlib/resources/abc.py
#	Lib/importlib/resources/readers.py
#	Lib/importlib/resources/simple.py
#	Lib/multiprocessing/pool.py
#	Lib/socket.py
#	Lib/zipfile/_path/__init__.py
Concrete OSError subclasses raised in the stdlib often carried no errno at
all, so exc.errno was None and str(exc) lacked the usual "[Errno N]" prefix.
Pass an appropriate errno (and a filename where one is available) everywhere
such an exception is raised.

In C code, PyErr_SetString() with an OSError subclass has the same problem.
Add _PyErr_SetOSErrorWithMessage(), which builds the (errno, msg) pair, and
use it in sys.remote_exec(), _io.TextIOWrapper.read(), _interpchannels and
_Py_RemoteDebug_WriteRemoteMemory().  In _ssl the existing set_timeout_err()
helper covers the remaining sites.

turtle.TurtleScreen.save() now passes the offending path as the filename
argument instead of embedding it in the message, so its errors gain the
"[Errno N] ...: 'path'" form.  test_turtle and the as_completed() timeout
test are updated for the new messages.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot removed the stale Stale PR or inactive for long period of time. label Sep 1, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant