Python字符串内引用字典键值写文件报错的解决方法
故障原因
代码无法运行不需要调整原有字典存储分数的逻辑,问题出在两个语法细节上:
- Python是强制缩进的语言,
with语句管辖的代码块必须做缩进(常规缩进4个空格),你写的File.write两行和with行顶格对齐,根本不在with块的执行范围内,会直接触发语法报错。 - 你贴出的代码里的
"是HTML转义生成的双引号占位符,不是Python解释器能识别的合法引号字符,实际写代码时要替换成正常的单引号或双引号。另外f-string会自动把插值的内容转为字符串,没必要额外套一层str()处理字典取到的分数值。
修复后可直接运行的代码
# 注意write语句前要加缩进,属于with块内的执行逻辑 with open(path, 'w', encoding='utf-8') as File: File.write(f"player score is {score['Player']}\n" f"computer score is {score['computer']}")
小提示:
open里加encoding='utf-8'是为了跨系统兼容,避免Windows默认GBK编码和其他系统默认UTF-8编码不一致导致的乱码,如果你的记录文件全是数字、英文也可以省略这个参数,加上更稳妥。
可选优化(完全不改动原有分数存储逻辑)
如果后续你要新增其他角色的分数记录,不用反复拼接字符串,可以加个名称映射直接遍历字典写入,维护起来更方便:
# 只需要维护角色名和输出文案的对应关系就行,不需要改原有score字典的存储结构 role_output_map = { "Player": "player score is ", "computer": "computer score is " } with open(path, 'w', encoding='utf-8') as File: for role, val in score.items(): File.write(f"{role_output_map[role]}{val}\n")
内容的提问来源于stack exchange,提问作者Willem
相关产品推荐
相关产品推荐

