From: Neil Schemenauer Date: Sat, 23 Mar 2002 23:51:04 +0000 (+0000) Subject: Use linecache for loading source code. Closes SF patch 490374. X-Git-Tag: v2.3c1~6371 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f06f8530f1d2b844d560d7420998780637f3184b;p=python Use linecache for loading source code. Closes SF patch 490374. --- 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