You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中以Windows文件路径为键访问字典触发KeyError求助

问题分析与解决

错误原因

  1. KEYERROR 1 原因:字典的键是字符串类型,你用Path实例作为key查找时,因类型不匹配导致失败。Python字典查找严格匹配类型和值,字符串与Path对象属于不同类型,即便路径内容一致也会被判定为不同key。
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:31:17