os.path.isfile() error

John Machin sjmachin at lexicon.net
Sat Apr 7 11:29:13 CEST 2007


On Apr 7, 6:56 pm, "7stud" <bbxx789_0... at yahoo.com> wrote:
> Here's the code:
> ------------
> import os, os.path, pprint
>
> mydir = "/Users/me/2testing"
>
> files = [file for file in os.listdir(mydir)]
> pprint.pprint(files)
>
> print os.path.join(mydir, "helloWorld.py")
>
> files = [file
> for file in os.listdir(mydir)
> if os.path.isfile(os.path.join(dir, file) )
> ]
>
> pprint.pprint(files)
> ----output:----------------
>
> ['.DS_Store', 'cpTest', 'dir1', 'testfile1', 'xmlFile.xml']
> /Users/me/2testing/helloWorld.py
> Traceback (most recent call last):
>   File "test1.py", line 16, in ?
>     files = [file
>   File "/System/Library/Frameworks/Python.framework/Versions/2.3/lib/
> python2.3/posixpath.py", line 62, in join
>     elif path == '' or path.endswith('/'):
> AttributeError: 'builtin_function_or_method' object has no attribute
> 'endswith'

Re your subject: os.path.isfile is nothing to do with the problem.
As is evident from the traceback, the error (which is in *your* code)
was detected in os.path.join, before os.path.isfile was called.

Looking at the source file (posixpath.py), one sees that the offending
"path" (the builtin function/method with no endswith attribute) is the
first formal arg of os.path.join. You have supplied "dir" as the first
actual arg. dir is a builtin function. You meant "mydir" instead.

BTW, don't use "file" (or the name of any other builtin function) for
your own variables. Use meaningful names -- what you have called
"file" is not a file, it is the name of a file. Get pychecker and/or
pylint and run them over your source periodically. They'll detect not
only shadowing builtins but many other types of actual and potential
gotchas.

HTH,
John




More information about the Python-list mailing list