如何检测符号链接指向的目录是否缺失?Python报错规避方法
问题描述
我有一个指向不存在目录的符号链接:
~/ramdisk -> /dev/shm/mydir
运行Python代码时,遇到如下错误:
FileNotFoundError: [Errno 2] No such file or directory: '~/ramdisk'
如何提前检测目录缺失以规避该错误?目前仅找到用于创建符号链接的symlink()方法。
解决方法
可以通过Python的os模块或pathlib模块检测符号链接的目标是否存在,具体实现如下:
方法一:使用os模块
import os # 解析~为当前用户的主目录 link_path = os.path.expanduser("~/ramdisk") if os.path.islink(link_path): # 获取符号链接指向的目标路径 target_path = os.readlink(link_path) # 处理目标路径为相对路径的情况,转换为绝对路径 if not os.path.isabs(target_path): target_path = os.path.join(os.path.dirname(link_path), target_path) # 检查目标路径是否存在且为目录 if os.path.exists(target_path) and os.path.isdir(target_path): print("符号链接目标目录有效") # 此处编写正常业务逻辑 else: print("符号链接目标目录不存在或不是目录") # 此处编写错误处理逻辑,比如创建目录或提示用户 else: print("指定路径不是符号链接或不存在")
方法二:使用pathlib模块(Python 3.4+)
pathlib提供了更简洁的面向对象写法:
from pathlib import Path link_path = Path.home() / "ramdisk" if link_path.is_symlink(): # 解析符号链接的真实目标路径,自动处理相对路径 target_path = link_path.resolve() if target_path.exists() and target_path.is_dir(): print("符号链接目标目录有效") # 此处编写正常业务逻辑 else: print("符号链接目标目录不存在或不是目录") # 此处编写错误处理逻辑 else: print("指定路径不是符号链接或不存在")
关键说明
os.path.islink()/Path.is_symlink():仅判断路径是否为符号链接,不关心目标是否存在os.readlink():获取符号链接指向的原始路径(可能是相对路径)Path.resolve():直接获取符号链接的绝对真实路径,无需手动处理相对路径- 最终需同时检查目标路径存在且是目录,避免目标为文件的异常情况
内容的提问来源于stack exchange,提问作者Pietro
相关产品推荐
相关产品推荐

