Python交易机器人报错:'type' object is not subscriptable 求助
问题分析与解决方案
错误原因
触发TypeError: 'type' object is not subscriptable有两个核心问题:
字典被错误转成列表:在
get_project_settings函数中,你把json.load()返回的字典对象转成了列表(project_settings = list(project_settings))。列表只能通过数字下标访问元素,无法用字典的键(如["username"])取值,直接导致后续调用project_settings["username"]失败。异常处理逻辑错误:当文件路径不存在时,你返回了
ImportError这个类对象(而非抛出异常)。此时project_settings是一个类型对象,尝试对类型使用下标访问自然会触发类型错误。
修复步骤
1. 修正get_project_settings函数
修改函数逻辑,保留字典结构并正确处理文件不存在的情况:
def get_project_settings(importFilepath): if os.path.exists(importFilepath): with open(importFilepath, "r") as f: # 使用with语句自动关闭文件,更安全简洁 project_settings = json.load(f) return project_settings # 直接返回字典,不要转成列表 else: raise ImportError(f"Settings file not found at {importFilepath}") # 抛出异常而非返回类对象
2. 检查文件路径正确性
确认import_filepath指向真实存在的settings.json文件。当前代码中的路径是:
import_filepath = "C:/Users/james/PycharmProjects/how_to_build_a_metatrader5_trading_bot_expert_advisor/settings.json"
请根据自己的实际文件位置修改该路径,确保文件确实存在。
3. 补充缺失的配置项
注意到main.py中尝试访问project_settings['pip_size'],但你的settings.json里没有这个字段,需要在配置文件中添加对应项:
{ "username": "51410030", "password": "s5p3GI1zY", "server": "Alpari-MT5-Demo", "mt5Pathway": "C://Program Files/Alpari MT5/terminal64.exe", "symbols": ["USDJPY.a"], "timeframe": "M30", "pip_size": 0.01 # USDJPY的点值通常为0.01,可根据品种调整 }
验证修复
修改完成后重新运行main.py,若文件路径正确且配置项齐全,即可正常初始化MT5并运行策略。
内容的提问来源于stack exchange,提问作者arvin sh
相关产品推荐
相关产品推荐

