gh-113329: Catch OSError in doctest finder and document that inspect.getsourcefile/getfile can raise OSError (GH-113335)
serhiy-storchaka <[email protected]> Thu, 13 Aug 2026 03:41:10 -0400 (EDT)
| Newsgroups | gmane.comp.python.cvs |
|---|---|
| Message-ID | <[email protected]> |
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]