<p><code>break</code>只留下当前循环。必须使用返回值来表示递归的结束</p>
<pre><code>def searchFilePath(filename, path):
""" returns True if the filename was found in path """
try:
for direction in os.listdir(path):
if direction == filename:
print(path)
return True
elif not os.path.isfile(os.path.join(path, direction)):
if searchFilePath(filename, os.path.join(path, direction)):
return True
except PermissionError:
pass
return False
</code></pre>
<p>或者如果您想进一步使用<code>path</code>:</p>
<pre><code>def searchFilePath(filename, path):
""" returns the path, where the filename was found """
try:
for direction in os.listdir(path):
if direction == filename:
return path
elif not os.path.isfile(os.path.join(path, direction)):
found = searchFilePath(filename, os.path.join(path, direction)):
if found is not None:
return found
except PermissionError:
pass
return None
</code></pre>
<p>如果使用<code>os.walk</code>,可以将函数简化为:</p>
<pre><code>def searchFilePath(filename, path):
for path, _, filenames in os.walk(path):
if filename in filenames:
return path
return None
</code></pre>