pathlib.Path.exists对损坏符号链接返回False,如何正确检测其存在?
解决损坏符号链接的存在性判断问题
问题原因
pathlib.Path.exists() 方法的逻辑是跟随符号链接检查目标文件是否存在,而非检查符号链接文件本身是否存在。所以当你创建了指向已删除文件的损坏符号链接时:
p.is_symlink()返回True(确认这是一个符号链接)p.exists()返回False(因为链接指向的目标不存在)
但此时符号链接文件test.lnk本身是真实存在的,直接执行p.symlink_to()就会触发FileExistsError——系统不允许在已有文件(包括损坏的符号链接)的路径上创建新链接。
解决方法
要判断符号链接文件本身是否存在,可以用以下几种方式:
方法1:使用 os.path.lexists()
os.path.lexists() 专门用于判断路径是否存在(包括损坏的符号链接),不会跟随链接检查目标:
import os import pathlib p = pathlib.Path('test.lnk') if not os.path.lexists(p): p.symlink_to('another_file')
方法2:组合 pathlib 的方法判断
如果不想引入os模块,可以结合is_symlink()和exists():
import pathlib p = pathlib.Path('test.lnk') # 只有当路径既不是符号链接,也不存在其他文件时,才创建新链接 if not (p.is_symlink() or p.exists()): p.symlink_to('another_file')
方法3:使用 lstat() 捕获异常
lstat() 会返回符号链接本身的元数据(不跟随链接),如果路径不存在则抛出FileNotFoundError:
import pathlib p = pathlib.Path('test.lnk') try: p.lstat() except FileNotFoundError: # 路径不存在,创建新符号链接 p.symlink_to('another_file')
关键区别
exists():检查符号链接指向的目标文件是否存在is_symlink():检查路径是否是一个符号链接(不管目标是否存在)lexists()/lstat():检查符号链接文件本身是否存在
内容的提问来源于stack exchange,提问作者sanyassh
相关产品推荐
相关产品推荐

