diff options
Diffstat (limited to 'Lib')
-rw-r--r-- | Lib/inspect.py | 4 | ||||
-rw-r--r-- | Lib/test/test_inspect.py | 7 |
2 files changed, 10 insertions, 1 deletions
diff --git a/Lib/inspect.py b/Lib/inspect.py index 1453f3b..3305c8d 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -523,7 +523,9 @@ def findsource(object): or code object. The source code is returned as a list of all the lines in the file and the line number indexes a line in that list. An IOError is raised if the source code cannot be retrieved.""" - file = getsourcefile(object) or getfile(object) + file = getsourcefile(object) + if not file: + raise IOError('source code not available') module = getmodule(object, file) if module: lines = linecache.getlines(file, module.__dict__) diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py index 7312cac..5c41433 100644 --- a/Lib/test/test_inspect.py +++ b/Lib/test/test_inspect.py @@ -9,6 +9,9 @@ from test.test_support import TESTFN, run_unittest from test import inspect_fodder as mod from test import inspect_fodder2 as mod2 +# C module for test_findsource_binary +import time + # Functions tested in this suite: # ismodule, isclass, ismethod, isfunction, istraceback, isframe, iscode, # isbuiltin, isroutine, isgenerator, isgeneratorfunction, getmembers, @@ -329,6 +332,10 @@ class TestBuggyCases(GetSourceBase): def test_method_in_dynamic_class(self): self.assertSourceEqual(mod2.method_in_dynamic_class, 95, 97) + def test_findsource_binary(self): + self.assertRaises(IOError, inspect.getsource, time) + self.assertRaises(IOError, inspect.findsource, time) + # Helper for testing classify_class_attrs. def attrs_wo_objs(cls): return [t[:3] for t in inspect.classify_class_attrs(cls)] |