gpt4 book ai didi

python - 如何忽略调用 rglob 时发生的异常?

转载 作者:行者123 更新时间:2023-12-03 18:57:18 26 4
gpt4 key购买 nike

我正在使用 pathlib.Path.rglob 浏览目录层次结构中的一些文件。但是其中一个(sub-sub-...)目录无法解析并抛出异常。

import pathlib
for file in pathlib.Path(r'\\path\to\shared\folder').rglob('*.foo'):
pass
# OSError: [WinError 59] An unexpected network error occurred

for 循环体中捕获异常是没有意义的,因为异常发生在 rglob 中。将整个循环放在 try block 中确实捕获了异常,但是我无法恢复计算。

有没有人知道如何使用 pathlib.Path.rglob 做到这一点?解决方法是使用旧的 os.walk,但我很想知道这个据称更现代的工具的解决方案。

最佳答案

首先,尝试在你的 python shell 中运行 filePaths = Path(r'\\path\to\shared\folder').rglob('*.foo') 看看是否它没有错误地完成。如果是这样,您可以尝试在迭代期间捕获运行时异常(可能是由于网络连接不稳定)。

def try_loop(g):
while True:
try:
yield next(g)
except StopIteration:
break
except OSError as e:
# log error
continue

然后将你的 rglob 调用包装在 try_loop 函数中

for file in try_loop(pathlib.Path(r'\\path\to\shared\folder').rglob('*.foo')):
pass

这是受一个更普遍的问题 "Handle an exception thrown in a generator" 的启发.

关于python - 如何忽略调用 rglob 时发生的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55265522/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com