我正在尝试在目录中查找文件,如果没有等待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)
我相信这不起作用,但有人可以帮我找到一种方法,我可以让这种结构像这样工作。
提前致谢!!
答案 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循环不会有这个缺点。