用于查找目录的递归python函数

时间:2014-03-27 01:05:00

标签: python recursion time

我正在尝试在目录中查找文件,如果没有等待10分钟并再次无休止地检查,并且一旦我将文件返回到调用程序的返回路径。

我想以干净的递归方式做,我不擅长递归,所以需要社区的帮助。

调用函数会调用类似这样的东西

path = self.find_dir(path,dir_name)

我想要的功能本身就像

def find_dir(self,path,dir_name):
try:
   #my logic to look for dir and do other checks 
   #will be here   
except Exception, Err:
   sleep(self.wait_time)
   #after waiting then call the function again
   find_dir(self, path , dir_name)

我相信这不起作用,但有人可以帮我找到一种方法,我可以让这种结构像这样工作。

提前致谢!!

3 个答案:

答案 0 :(得分:1)

为什么不使用while循环?

def find_dir(self, path, dir_name):
    while True:
        try:
            #your logic
            return True
        except SpecificExceptionNotJustError:
            sleep(self.wait_time)

对可能无穷无尽的代码使用递归可能会导致超出系统的递归限制,在这种情况下应该避免使用。此外,您应该检查您所感知的特定错误,而不仅仅是Error。只检查Error可能会隐藏代码中的缺陷,并且应该始终

答案 1 :(得分:0)

while循环将完成这项工作。 os.walk()以递归方式遍历目录。这是骨架:

def find_dir(self, path, dir_name):
    while True:
        try:
            for root,dirs,files in os.walk(dir_name):
                if path in root:
                     return True
            raise FileNotFoundError
        except FileNotFoundError:
            sleep(self.wait_time)

上面的代码段将返回True,直到dir_name中存在路径。

如果您要检查文件或多实体,只需更改代码。

答案 2 :(得分:-1)

如果你坚持递归,它看起来基本上很好,你只需要返回一些东西。由于Python不进行尾部调用消除,因此无法无限期地监视。一个while循环不会有这个缺点。