mirror of
https://github.com/python/cpython.git
synced 2025-12-23 09:19:18 +00:00
bpo-44648: Fix error type in inspect.getsource() in interactive session (GH-27171)
This commit is contained in:
parent
ceea579ccc
commit
48a62559df
3 changed files with 21 additions and 1 deletions
|
|
@ -781,6 +781,8 @@ def getfile(object):
|
|||
module = sys.modules.get(object.__module__)
|
||||
if getattr(module, '__file__', None):
|
||||
return module.__file__
|
||||
if object.__module__ == '__main__':
|
||||
raise OSError('source code not available')
|
||||
raise TypeError('{!r} is a built-in class'.format(object))
|
||||
if ismethod(object):
|
||||
object = object.__func__
|
||||
|
|
|
|||
|
|
@ -585,6 +585,20 @@ class TestRetrievingSourceCode(GetSourceBase):
|
|||
def test_getsource_on_code_object(self):
|
||||
self.assertSourceEqual(mod.eggs.__code__, 12, 18)
|
||||
|
||||
class TestGetsourceInteractive(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
mod.ParrotDroppings.__module__ = mod
|
||||
sys.modules['__main__'] = self.main
|
||||
|
||||
def test_getclasses_interactive(self):
|
||||
self.main = sys.modules['__main__']
|
||||
class MockModule:
|
||||
__file__ = None
|
||||
sys.modules['__main__'] = MockModule
|
||||
mod.ParrotDroppings.__module__ = '__main__'
|
||||
with self.assertRaisesRegex(OSError, 'source code not available') as e:
|
||||
inspect.getsource(mod.ParrotDroppings)
|
||||
|
||||
class TestGettingSourceOfToplevelFrames(GetSourceBase):
|
||||
fodderModule = mod
|
||||
|
||||
|
|
@ -4342,7 +4356,8 @@ def test_main():
|
|||
TestBoundArguments, TestSignaturePrivateHelpers,
|
||||
TestSignatureDefinitions, TestIsDataDescriptor,
|
||||
TestGetClosureVars, TestUnwrap, TestMain, TestReload,
|
||||
TestGetCoroutineState, TestGettingSourceOfToplevelFrames
|
||||
TestGetCoroutineState, TestGettingSourceOfToplevelFrames,
|
||||
TestGetsourceInteractive,
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
|
|
|||
|
|
@ -0,0 +1,3 @@
|
|||
Fixed wrong error being thrown by :func:`inspect.getsource` when examining a
|
||||
class in the interactive session. Instead of :exc:`TypeError`, it should be
|
||||
:exc:`OSError` with appropriate error message.
|
||||
Loading…
Add table
Add a link
Reference in a new issue