diff options
Diffstat (limited to 'Lib/linecache.py')
| -rw-r--r-- | Lib/linecache.py | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/Lib/linecache.py b/Lib/linecache.py index c3f2c3fdca..884cbf493a 100644 --- a/Lib/linecache.py +++ b/Lib/linecache.py @@ -1,4 +1,4 @@ -"""Cache lines from files. +"""Cache lines from Python source files. This is intended to read lines from modules imported -- hence if a filename is not found, it will look down the module search path for a file by @@ -32,13 +32,17 @@ def clearcache(): def getlines(filename, module_globals=None): - """Get the lines for a file from the cache. + """Get the lines for a Python source file from the cache. Update the cache if it doesn't contain an entry for this file already.""" if filename in cache: return cache[filename][2] - else: + + try: return updatecache(filename, module_globals) + except MemoryError: + clearcache() + return [] def checkcache(filename=None): @@ -59,7 +63,7 @@ def checkcache(filename=None): continue # no-op for files loaded via a __loader__ try: stat = os.stat(fullname) - except os.error: + except OSError: del cache[filename] continue if size != stat.st_size or mtime != stat.st_mtime: @@ -91,7 +95,7 @@ def updatecache(filename, module_globals=None): if name and get_source: try: data = get_source(name) - except (ImportError, IOError): + except (ImportError, OSError): pass else: if data is None: @@ -118,14 +122,14 @@ def updatecache(filename, module_globals=None): try: stat = os.stat(fullname) break - except os.error: + except OSError: pass else: return [] try: with tokenize.open(fullname) as fp: lines = fp.readlines() - except IOError: + except OSError: return [] if lines and not lines[-1].endswith('\n'): lines[-1] += '\n' |
