Python中检查JSON文件内命令是否存在及代码故障调试求助
修复你的命令匹配代码
我看了你的代码,核心问题出在循环里的条件判断逻辑,导致永远无法匹配到正确的命令。咱们一步步拆解问题:
主要问题点
- 错误的存在性检查:
if Command in data['commands']这行逻辑完全不对。data['commands']是包含字典的列表,而Command是字符串,两者类型不匹配,这个条件永远返回False,所以代码永远走不到命令匹配的分支,直接输出错误信息。 - else分支位置错误:当前else放在循环内部,意味着只要有一个命令不匹配就立刻输出错误,但实际上应该等遍历完所有命令都没找到时,才输出错误提示。
- 冗余的重复判断:
Command.lower() == p['commandName']已经做了匹配校验,前面的存在性检查完全多余。 - 缺失目标函数:代码里调用
eval(p["function"] + '()'),但没有定义对应的print函数(还会和内置print冲突),运行时会直接报错。
修复后的代码
import json def print_help(): # 自定义帮助函数,避免和内置print冲突 print("Help command executed! Available commands: help") def login(): print("Oof") # 提前读取JSON文件,避免每次输入都重复读取 with open("data.json") as json_file: data = json.load(json_file) while True: command = input(">").lower() # 提前转小写,减少重复转换操作 command_found = False for cmd_info in data['commands']: if command == cmd_info['commandName']: # 用函数映射替代eval,更安全 function_map = { "print": print_help } function_map[cmd_info["function"]]() command_found = True break # 找到匹配命令后直接退出循环 if not command_found: print(f"Command '{command}' does not exist, try 'help'.") # 启动程序 login()
额外优化建议
- 替换eval:
eval存在严重安全风险,如果JSON文件被篡改,可能会执行恶意代码。用字典映射函数的方式更安全可控。 - 代码规范:Python变量和函数名建议遵循PEP8规范,用小写加下划线命名(比如
Command改成command,p改成cmd_info),可读性更强。 - 提前读取资源:把JSON文件读取放在循环外部,不需要每次用户输入都重新加载文件,节省系统资源。
内容的提问来源于stack exchange,提问作者Cass
相关产品推荐
相关产品推荐

