diff --git a/Lib/inspect.py b/Lib/inspect.py index 07c4e28f0d9952..808aef419519ce 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -843,7 +843,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 075e1802bebc3e..71cccdaa2dbf13 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 @@ -858,6 +859,12 @@ def test_getfile_builtin_module(self): inspect.getfile(sys) self.assertStartsWith(str(e.exception), '