"Maximum recursion depth exceeded"...why?

Peter Otten __peter__ at web.de
Wed Feb 18 00:05:18 CET 2009


Thomas Allen wrote:

> On Feb 17, 5:31 pm, Peter Otten <__pete... at web.de> wrote:
>> Thomas Allen wrote:
>> > I must not be understanding something. This is a simple recursive
>> > function that prints all HTML files in argv[1] as its scans the
>> > directory's contents. Why do I get a RuntimeError for recursion depth
>> > exceeded?
>>
>> > #!/usr/bin/env python
>>
>> > import os, sys
>>
>> > def main():
>> > absToRel(sys.argv[1], sys.argv[2])
>>
>> > def absToRel(dir, root):
>> > for filename in os.listdir(dir):
>>
>> filename = os.path.join(dir, filename)
>>
>> > if os.path.isdir(filename):
>> > absToRel(filename, root)
>> > else:
>> > if(filename.endswith("html") or filename.endswith("htm")):
>> > print filename
>>
>> > if __name__ == "__main__":
>> > main()
>>
>> Without the addition for a directory and a subdirectory of the same
>> name, "dir/dir", os.listdir("dir") has "dir" (the child) in the result
>> list which triggers an absToRel() call on "dir" (the parent) ad
>> infinitum.
>>
>> Peter
> 
> I have two problems in this case:
> 
> 1. I don't know how to reliably map the current filename to an
> absolute path beyond the top-most directory because my method of doing
> so would be to os.path.join(os.getcwd(), filename)

Don't make things more complicated than necessary. If you can do
os.listdir(somedir) you can also do [os.path.join(somedir, fn) for fn in
os.listdir(somedir)].
 
> 2. For some reason, only one folder in the directory gets marked as a
> directory itself when there are about nine others in the top-most
> directory. I don't even know where to begin to solve this one.
> 
> I'm sure the first is an easy answer, but what do I need to do to
> solve the second?

If you solve the first properly the second might magically disappear. This
is what my crystal ball tells me because there is no code in sight...

Peter



More information about the Python-list mailing list