安全删除文件应精准捕获 FileNotFoundError:用 try-except 捕获该异常并忽略,保留 PermissionError、IsADirectoryError 等关键错误;避免用空 except 吞掉所有异常,也不推荐仅依赖 os.path.exists 预检(存在竞态条件)。

直接使用 os.remove() 或 pathlib.Path.unlink() 删除一个可能不存在的文件时,会抛出 FileNotFoundError 异常。安全删除的核心是「不因文件不存在而中断程序」,同时避免掩盖其他真正需要关注的错误(比如权限不足、路径是目录等)。
推荐方式:用异常处理精准捕获 FileNotFoundError
这是最清晰、最可控的做法——只忽略「文件不存在」,保留对其他错误(如 PermissionError、IsADirectoryError)的感知:
-
Python 3.4+(
pathlib风格):from pathlib import Path
file = Path("example.txt")
try:
file.unlink()
except FileNotFoundError:
pass # 文件本来就没有,无需处理 -
传统 os 模块:
import os
try:
os.remove("example.txt")
except FileNotFoundError:
pass
简洁替代:用 os.path.exists + os.remove(需注意竞态条件)
先检查再删除看似直观,但存在微小时间窗口:检查时文件存在,删除时已被其他进程移走,仍会触发 FileNotFoundError。仅适用于对竞态不敏感的场景(如脚本一次性清理):
- 写法简单:
import os
if os.path.exists("example.txt"):
os.remove("example.txt") - 注意:
os.path.exists()对符号链接、权限问题不敏感,但无法完全替代异常捕获的健壮性。
高级需求:删除前确认是普通文件(防误删目录)
如果目标路径可能是目录或特殊文件,可加一层类型校验,避免 IsADirectoryError:
办公家具类企业网站源码是一个以asp+access进行开发的家具类企业网站源码。它无论是在功能上还是在速度上都做了很多优化,让程序的响应速度更快,功能更加全面,毫不夸张的说,网站上的任意内容,都可以通过网站的管理后台来修改、删除或新增,而且网站后台的可拓展性也非常强,管理后台有多语言管理功能,你也可以在这套源码的基础上再二次开发其他语言的前台模板即可,然后在后台的多语言管理中添加对应语言的模板文件
- 用
Path.is_file():from pathlib import Path
file = Path("example.txt")
if file.is_file():
file.unlink() - 或结合异常处理更稳妥:
try:
file.unlink()
except (FileNotFoundError, IsADirectoryError):
pass
不推荐的方式:静默吞掉所有异常
避免这样写:
try:
os.remove("example.txt")
except:
pass # ❌ 吞掉所有异常,调试困难
这会隐藏 PermissionError、OSError 等关键问题,不利于维护和排错。









