我发现了一个不直观的问题:如果你使用pathlib递归地glob一个快速变化的目录,其中其他目录被创建和删除,你有可能会遇到FileNotFoundException。如果目录不存在,那么为什么要打扰我呢?为什么不跳过错误的目录并继续执行呢?如何以简洁的方式解决这个问题?
以下是复现此问题的方法:
在一个终端中运行以下sh命令
或者,作为一行代码:
以下是复现此问题的方法:
在一个终端中运行以下sh命令
while true; do mkdir deleteme && rmdir deleteme; done
再来看使用Python脚本的情况:
from pathlib import Path
p = Path()
while True:
list(p.rglob('*'))
或者,作为一行代码:
while true; do mkdir 1 && rmdir 1; done & python3 -c "from pathlib import Path; from itertools import count; p = Path(); [list(p.rglob('*')) for i in count(start=1)]"; fg
try: list(p.rglob('*')) except FileNotFoundException: continue
- Jakob Guldberg Aaes