https://github.com/python/cpython/commit/025e7d278e29f3df2e95ed9daf9d9835760564c8
commit: 025e7d278e29f3df2e95ed9daf9d9835760564c8
branch: main
author: Sten Wessel <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-08-13T07:40:49Z
summary:
gh-113329: Catch OSError in doctest finder and document that
inspect.getsourcefile/getfile can raise OSError (GH-113335)
Fixes #113329, which occurs when running doctests in a class docstring in a
REPL environment.
Since Python 3.10, an OSError is raised when the class source code cannot be
found.
files:
A Misc/NEWS.d/next/Library/2023-12-20-22-05-40.gh-issue-113329.1CJy3o.rst
M Doc/library/inspect.rst
M Lib/doctest.py
diff --git a/Doc/library/inspect.rst b/Doc/library/inspect.rst
index 3b34445f019c36..3ca63d1d026135 100644
--- a/Doc/library/inspect.rst
+++ b/Doc/library/inspect.rst
@@ -747,6 +747,7 @@ Retrieving source code
.. function:: getfile(object)
Return the name of the (text or binary) file in which an object was defined.
+ An :exc:`OSError` is raised if the source code cannot be retrieved.
This will fail with a :exc:`TypeError` if the object is a built-in module,
class, or function.
@@ -760,9 +761,10 @@ Retrieving source code
.. function:: getsourcefile(object)
Return the name of the Python source file in which an object was defined
- or ``None`` if no way can be identified to get the source. This
- will fail with a :exc:`TypeError` if the object is a built-in module,
class, or
- function.
+ or ``None`` if no way can be identified to get the source. An
:exc:`OSError` is
+ raised if the source code cannot be retrieved.
+ This will fail with a :exc:`TypeError` if the object is a built-in module,
+ class, or function.
.. function:: getsourcelines(object)
diff --git a/Lib/doctest.py b/Lib/doctest.py
index 8a55fe3ddd2615..cf31eae5365b6e 100644
--- a/Lib/doctest.py
+++ b/Lib/doctest.py
@@ -922,7 +922,7 @@ def find(self, obj, name=None, module=None, globs=None,
extraglobs=None):
# given object's docstring.
try:
file = inspect.getsourcefile(obj)
- except TypeError:
+ except (TypeError, OSError):
source_lines = None
else:
if not file:
diff --git
a/Misc/NEWS.d/next/Library/2023-12-20-22-05-40.gh-issue-113329.1CJy3o.rst
b/Misc/NEWS.d/next/Library/2023-12-20-22-05-40.gh-issue-113329.1CJy3o.rst
new file mode 100644
index 00000000000000..d5abc0ec28dc9b
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2023-12-20-22-05-40.gh-issue-113329.1CJy3o.rst
@@ -0,0 +1 @@
+Fix :exc:`OSError` being raised when trying to run doctests on a class objects
in the REPL. Patch by Sten Wessel.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]