[Python-Dev] linecache problem

Guido van Rossum guido at python.org
Fri Sep 30 16:30:06 CEST 2005


On 9/30/05, Thomas Heller <theller at python.net> wrote:
> On several occasions I have seen tracebacks in my code pointing to PIL's
> __init__.py file. That is strange, because I have installed PIL but it
> is used nowhere.
>
> Finally I traced it down to a problem in the linecache code, which tries
> to be smart in up updatecache function.  When os.stat() on the filename
> fails with os.error, it walks along sys.path and returns the first file
> with a matching basename. This *may* make sense for toplevel modules,
> but never for modules in packages.
>
> So, if the traceback's stack contains an entry for a non-existing file
> (for example because the .py file for a .pyc file is no longer present),
> linecache returns absolute garbage.
>
> Example, on my system (the \a\b\c\__init__.py file doesn't exist):
>
> C:\>python -c "import linecache; print linecache.getlines(r'\a\b\c\__init__.py')"
> ['#\n', '# The Python Imaging Library.\n',
> '# $Id: //modules/pil/PIL/__init__.py#2 $\n', '#\n',
> '# package placeholder\n', '#\n', '# Copyright (c) 1999 by Secret Labs AB.\n',
> '#\n', '# See the README file for information on usage and redistribution.\n',
> '#\n', '\n', '# ;-)\n']
> C:\>
>
> The bug is present in 2.3, 2.4, and current CVS.

Probably my fault (I wrote linecache, 13 years ago (before Python had
packages!).

But looking at the code I don't understand why this is; there's no
code to descend into subdirectories of directories found on sys.path.

I wonder if the problem isn't on PIL's end, which puts the PIL
directory on sys.path?

Anyway, don't hesitate to suggest a patch on sourceforge -- python-dev
really isn't the forum for further discussion of this issue.

--
--Guido van Rossum (home page: http://www.python.org/~guido/)


More information about the Python-Dev mailing list