From f06f8530f1d2b844d560d7420998780637f3184b Mon Sep 17 00:00:00 2001 From: Neil Schemenauer Date: Sat, 23 Mar 2002 23:51:04 +0000 Subject: [PATCH] Use linecache for loading source code. Closes SF patch 490374. --- Lib/inspect.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/Lib/inspect.py b/Lib/inspect.py index 9e2d23d58b..e4f6b575e0 100644 --- a/Lib/inspect.py +++ b/Lib/inspect.py @@ -27,7 +27,7 @@ Here are some of the useful functions provided by this module: __author__ = 'Ka-Ping Yee ' __date__ = '1 Jan 2001' -import sys, os, types, string, re, dis, imp, tokenize +import sys, os, types, string, re, dis, imp, tokenize, linecache # ----------------------------------------------------------- type-checking def ismodule(object): @@ -381,12 +381,10 @@ 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.""" - try: - file = open(getsourcefile(object)) - except (TypeError, IOError): + file = getsourcefile(object) or getfile(object) + lines = linecache.getlines(file) + if not lines: raise IOError, 'could not get source code' - lines = file.readlines() - file.close() if ismodule(object): return lines, 0 @@ -706,7 +704,7 @@ def getframeinfo(frame, context=1): if not isframe(frame): raise TypeError, 'arg is not a frame or traceback object' - filename = getsourcefile(frame) + filename = getsourcefile(frame) or getfile(frame) lineno = getlineno(frame) if context > 0: start = lineno - 1 - context//2 -- 2.50.1