Python 3.10使用pathlib.relative_to()时walk_up参数报错问题
问题原因与解决方案
核心问题
walk_up参数是Python 3.12及以上版本才新增到pathlib.PurePath.relative_to()方法中的,你使用的Python 3.10.12并不支持这个参数,这就是报错的根本原因。
至于IDE会自动补全该参数,是因为IDE的代码提示基于最新的Python标准库文档/类型定义,没有适配你当前使用的旧版本Python。
解决方案
方案1:升级Python版本
直接将Python升级到3.12或更高版本,即可正常使用walk_up=True参数:
from pathlib import Path p = Path(__file__).relative_to('some-parent-path-i-know-exists', walk_up=True)
方案2:手动实现回溯父目录逻辑(不升级Python)
如果无法升级版本,可以自己写函数实现向上遍历找目标父目录的逻辑:
from pathlib import Path def get_relative_path_walk_up(source_path: Path, target_parent: str) -> Path: # 解析为绝对路径避免相对路径歧义 source_abs = source_path.resolve() target_abs = Path(target_parent).resolve() # 向上遍历直到找到目标父目录的子路径 current_path = source_abs while not current_path.is_relative_to(target_abs): # 到达根目录还没找到,抛出异常 if current_path == current_path.parent: raise ValueError(f"目标目录 {target_parent} 不是当前文件路径的祖先目录") current_path = current_path.parent # 返回相对路径 return current_path.relative_to(target_abs) # 使用示例 p = get_relative_path_walk_up(Path(__file__), "some-parent-path-i-know-exists")
这个函数会先把路径转为绝对路径,然后循环向上查找父目录,直到找到目标父目录的子路径,最后返回相对路径,效果和Python3.12的walk_up=True一致。
内容的提问来源于stack exchange,提问作者Yohann Pitrey
相关产品推荐
相关产品推荐

