Python中以Windows文件路径为键访问字典触发KeyError求助
问题分析与解决
错误原因
- KEYERROR 1 原因:字典的键是字符串类型,你用
Path实例作为key查找时,因类型不匹配导致失败。Python字典查找严格匹配类型和值,字符串与Path对象属于不同类型,即便路径内容一致也会被判定为不同key。 - KEYERROR 2 原因:你处理后的字符串实际包含双反斜杠(
\\),但字典键的实际存储内容是单反斜杠(打印时显示的\\是Python对单斜杠的转义表示)。比如字典键'7ded3d66-8ed6-4edc-9127-b6ba2a598369\\3\\hfoutp.in',实际对应路径是7ded3d66-8ed6-4edc-9127-b6ba2a598369\3\hfoutp.in,而你处理后的字符串是7ded3d66-8ed6-4edc-9127-b6ba2a598369\\3\\hfoutp.in,字符内容不匹配,自然找不到。
解决方案
方法1:将Path对象转为字符串查找
直接把生成的Path对象转为字符串,Path的字符串表示是系统原生路径格式(Windows下为单反斜杠),与字典键的实际内容一致:
from pathlib import Path import sys target_path = Path(f'{site_dir}/hfoutp.in') target_key = str(target_path) # 转为字符串类型的路径 print(job_slurm_dict) print(target_path) try: print(job_slurm_dict[target_key]) except KeyError: print('KEYERROR') sys.exit(1)
方法2:统一用Path对象作为字典键
如果可以修改字典的构建逻辑,将所有键转为Path对象,后续查找无需处理转义问题:
from pathlib import Path import sys # 重构字典,把字符串键转为Path对象 job_slurm_dict = {Path(key): value for key, value in job_slurm_dict.items()} target_path = Path(f'{site_dir}/hfoutp.in') try: print(job_slurm_dict[target_path]) except KeyError: print('KEYERROR') sys.exit(1)
方法3:用原始字符串构造查找键
若坚持用字符串查找,用原始字符串避免转义问题,确保构造的字符串与字典键内容一致:
import sys # 用原始字符串自动处理斜杠,无需手动转义 target_key = rf'{site_dir}\hfoutp.in' # 也可以用转义双斜杠:target_key = f'{site_dir}\\hfoutp.in' try: print(job_slurm_dict[target_key]) except KeyError: print('KEYERROR') sys.exit(1)
内容的提问来源于stack exchange,提问作者p-walt
相关产品推荐
相关产品推荐

