Python检查.gcom文件是否存在的if语句格式错误求助
解决Python路径拼接中的KeyError问题及代码优化建议
首先,你遇到的KeyError: 'C'是因为路径拼接的写法完全错误,导致字符串格式化逻辑混乱。我们一步步拆解问题,再给出修正方案:
错误原因分析
你第135行的代码:
if os.path.isfile(("C:\\Genisis_AI\\Commands\\{}").format(file_name).join("{}").format(filetype)):
这里的逻辑完全走偏了:
- 首先
("C:\\Genisis_AI\\Commands\\{}").format(file_name)会生成类似C:\Genisis_AI\Commands\test的字符串 - 然后调用
.join("{}"),join方法的作用是把传入的可迭代对象的元素用原字符串连接,所以"abc".join("{}")会变成{abc} - 此时你的字符串变成了
C:\Genisis_AI\Commands\test{C}{} - 最后调用
.format(filetype)时,Python会把{C}当成一个需要替换的命名占位符,但你没有传入C这个参数,所以直接抛出KeyError: 'C'
正确的路径拼接方式
Python处理路径最好用os.path.join(跨平台友好),或者直接用f-string/正确的字符串格式化,比如:
方式1:用os.path.join(推荐)
file_path = os.path.join("C:\\Genisis_AI\\Commands", f"{file_name}{filetype}") # 或者拆分更清晰: file_path = os.path.join("C:\\Genisis_AI\\Commands", file_name + filetype)
方式2:用f-string
file_path = f"C:\\Genisis_AI\\Commands\\{file_name}{filetype}"
方式3:用format
file_path = "C:\\Genisis_AI\\Commands\\{}{}".format(file_name, filetype)
代码其他问题修正
除了路径拼接,你的代码还有几个明显的问题,一起修正:
- 函数参数缺失:你调用
cComFile('test'),但函数定义是def cComFile():,需要添加参数 - 局部变量引用错误:你错误地用
cComFile.file_name引用局部变量,直接用变量名即可 - raw_input兼容问题:Python3中
raw_input已经改为input - 字符串小写转换无效:
string.lower(a)应该改为a = a.lower(),因为lower()返回新字符串,不会修改原变量 - 文件打开语法错误:
open()的括号配对错误,而且路径拼接也有问题
修正后的完整代码
import os def cComFile(command): # 添加参数command # This will NOT write command code (Yet) I want to see if file creation works! filetype = '.gcom' commands_Directory = 'C:\\Genisis_AI\\Commands\\' file_name = command # 正确拼接路径 file_path = os.path.join(commands_Directory, f"{file_name}{filetype}") if os.path.isfile(file_path): a = input(f'{file_name} already exists! Would you like to overwrite this? [Y/N]: ') # 替换raw_input为input,用f-string更简洁 a = a.lower() # 正确转换小写 if a == 'y': print(f"Command: {file_name} , has been rewritten!") # 这里需要重新打开文件写入,原代码漏了 with open(file_path, 'w+') as f: f.write('command was made') elif a == 'n': pass else: print("Invalid input, please enter Y or N") else: # 正确打开文件,用with语句自动关闭文件(推荐) with open(file_path, 'w+') as f: f.write('command was made') print(f'Command made: {file_name}') # 调用示例 cComFile('test')
额外优化建议
- 用
with语句操作文件,避免忘记关闭文件导致资源泄漏 - 路径字符串可以用原始字符串,比如
r"C:\Genisis_AI\Commands\",不用写双反斜杠 - 增加输入验证,比如用户输入非Y/N时提示重新输入
- 可以把路径定义为常量,或者通过参数传入,增强代码灵活性
内容的提问来源于stack exchange,提问作者NaruS
相关产品推荐
相关产品推荐

