diff --git a/Lib/inspect.py b/Lib/inspect.py index 5a46987b78b437..4bd59d512c0159 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -819,7 +819,9 @@ def getfile(object): if ismodule(object): if getattr(object, '__file__', None): return object.__file__ - raise TypeError('{!r} is a built-in module'.format(object)) + if getattr(object, '__spec__', None) is not None: + raise TypeError(f'{object!r} is a built-in module') + raise TypeError(f'cannot get source from {object!r}') if isclass(object): if hasattr(object, '__module__'): module = sys.modules.get(object.__module__) diff --git a/Lib/test/test_inspect/test_inspect.py b/Lib/test/test_inspect/test_inspect.py index 88fa4b7460c412..8e1efe60a0ecab 100644 --- a/Lib/test/test_inspect/test_inspect.py +++ b/Lib/test/test_inspect/test_inspect.py @@ -15,6 +15,7 @@ from os.path import normcase import _pickle import pickle +import re import shutil import stat import sys @@ -811,6 +812,12 @@ def test_getfile_builtin_module(self): inspect.getfile(sys) self.assertStartsWith(str(e.exception), '