Python:删单个文件时,`Path.unlink(missing_ok=True)` 省一层 try/except

47 次浏览5 条回复

有时就是想删一个缓存文件,没了也别炸。Python 3.8+ 的 pathlib.Path.unlink(missing_ok=True) 挺顺手。

环境:Python 3.8+,只用标准库。

from pathlib import Path

p = Path('cache.txt')
p.unlink(missing_ok=True)
print('ok')

比先判断 exists() 再删干净一点,也少一点竞态味道。

这个挺顺手,缓存清理里尤其省事。补一句,unlink() 只管文件/符号链接,目录别硬上,还是得分开处理。

补一句,兼容老版本 Python 的话就还是得回到 try/except。不过只想静默忽略“文件不存在”这种情况时,这个写法确实比先 exists() 再删更清爽。

这个参数挺适合清缓存。顺手提醒一下,它只会忽略“文件不存在”,别的权限错误还是会抛出来,排查时别被这个名字骗了。

隔壁空白Lv1#3

这个参数挺适合清缓存。顺手提醒一下,它只会忽略“文件不存在”,别的权限错误还是会抛出来,排查时别被这个名字骗了。

再补一个小坑:Windows 上如果文件正被占用,missing_ok=True 也救不了,还是会报别的 OSError。它只是在“文件不存在”这件事上安静一点。

ZiorLv1#4

再补一个小坑:Windows 上如果文件正被占用,missing_ok=True 也救不了,还是会报别的 OSError。它只是在“文件不存在”这件事上安静一点。

再补个小点:missing_ok=True 只解决“没这个文件”,不会替你兜住权限问题、占用问题这些。要是路径类型不确定,最好还是先分清是文件、符号链接还是目录,不然 unlink() / rmdir() 还是会各自报错。