gpt4 book ai didi

python - 忽略来自生成器的异常

转载 作者:行者123 更新时间:2023-11-28 17:38:37 24 4
gpt4 key购买 nike

通过使用 os.walk() 像这样遍历文件夹:

for subdir, dirs, files in os.walk(path):
do something...

会抛出一个异常:UnicodeDecodeError,我想忽略这个异常继续,我试过这个:

try:
for subdir, dirs, files in os.walk(path):
do something...
except Exception, e:
logging.exception(e)
continue # this continue is illegal

正如评论所说,异常部分的continue是一个语法错误。有没有办法忽略异常继续遍历?

异常是从os.walk()中抛出的,所以把try/except放在for中是无法捕捉到异常的。 os.walk() 将返回一个 python 生成器,如何捕获其中的异常?

最佳答案

更新:

我最初认为错误是由 do something... 代码引起的。由于它实际上是由 os.walk 引发的,因此您需要做一些不同的事情:

walker = os.walk(path)
while True:
try:
subdir, dirs, files = next(walker)
except UnicodeDecodeError as e:
logging.exception(e)
continue
except StopIteration:
break

do something...

基本上,这是利用了 os.walk 返回 generator object 的事实。 .这允许我们调用 next在它上面,从而控制每个步骤中的迭代。

subdir, dirs, files = next(walker) 行试图推进迭代。如果出现 UnicodeDecodeError,它会被记录下来,我们会继续下一步。如果出现 StopIteration 异常,则意味着我们已完成对目录树的遍历。因此,我们打破循环。


由于 continue 需要在循环内,因此您还需要将 try/except block 移到其中:

for subdir, dirs, files in os.walk(path):
try:
do something...
except Exception, e:
logging.exception(e)
continue # this continue is *not* illegal

另外,做:

except Exception, e:

已弃用。您应该使用 as 关键字代替 ,:

except Exception as e:

当你这样做时,你应该用特定的 UnicodeDecodeError 替换通用的 Exception:

except UnicodeDecodeError as e:

您应该始终尽可能捕获最具体的异常。否则,您可能会意外捕获到您不想处理的异常。

关于python - 忽略来自生成器的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27613611/

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