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

Python TypeError: 'float'不可下标访问问题排查与代码修复请求

错误原因排查
  • 报错TypeError: 'float' object is not subscriptable的核心问题:你代码中的balance_info是浮点数类型,而非预期的字典类型。
  • 根源出在get_current_balances函数的返回值:该函数返回的balances字典里,每个币种对应的value是直接的余额数值(float),而非包含free键的字典结构。比如它可能返回{"USDT": 100.5, "BNB": 2.3},而非{"USDT": {"free": 100.5}}。
  • 当你用balances.get(symbol, {"free": 0.0})时,若币种存在则拿到的是浮点数,后续尝试用balance_info['free']访问下标自然会触发报错。
修复方案

两种方案任选其一即可:

方案1:适配函数返回值,修改打印逻辑

如果不想改动get_current_balances函数,直接调整打印代码:

# Get the current balances for the specified symbols
symbols_to_check = ["USDT", "BNB", "BTC", "ETH"]
balances = get_current_balances(symbols_to_check)
print("Current Balances:")
for symbol in symbols_to_check:
    free_balance = balances.get(symbol, 0.0)
    print(f"{symbol}: Free - {free_balance}")

方案2:修改get_current_balances函数,返回字典格式

如果希望函数返回包含free键的字典结构,调整函数逻辑:

def get_current_balances(symbols):
    balances = {}
    # 假设此处为Binance API调用逻辑
    for sym in symbols:
        # 原代码直接赋值浮点数,改为嵌套字典格式
        balances[sym] = {"free": float(api_response["free"])}
    return balances
代码优化建议
  • 添加异常处理:调用Binance API时必须捕获网络错误、API权限错误等异常,避免程序直接崩溃:
    import requests
    def get_current_balances(symbols):
        balances = {sym: {"free": 0.0} for sym in symbols}
        try:
            # 替换为你的API请求逻辑
            response = requests.get("https://api.binance.com/api/v3/account", 
                                   headers={"X-MBX-APIKEY": "your_api_key"})
            response.raise_for_status()  # 触发HTTP错误
            account_data = response.json()
            for asset in account_data["balances"]:
                if asset["asset"] in symbols:
                    balances[asset["asset"]] = {
                        "free": float(asset["free"]),
                        "locked": float(asset["locked"])
                    }
            return balances
        except requests.exceptions.RequestException as e:
            print(f"API请求失败: {e}")
            return balances
    
  • 添加类型提示:给函数加类型标注,提升代码可读性:
    from typing import Dict, List
    def get_current_balances(symbols: List[str]) -> Dict[str, Dict[str, float]]:
        # 函数逻辑
        pass
    
  • 配置分离:将API密钥、监控币种等参数放到单独的config.py文件,避免硬编码:
    # config.py
    API_KEY = "your_api_key"
    API_SECRET = "your_api_secret"
    SYMBOLS_TO_CHECK = ["USDT", "BNB", "BTC", "ETH"]
    
    主代码导入使用:from config import API_KEY, SYMBOLS_TO_CHECK
预测模型改进建议
  • 从简单策略入手:作为新手,优先尝试均线交叉(如5日均线金叉20日均线)、RSI超买超卖等经典技术指标策略,逻辑简单易实现,适合快速验证效果。
  • 强制回测验证:任何策略上线前必须用历史数据回测,可使用backtrader或vectorbt库,验证胜率、最大回撤、年化收益等核心指标,避免实盘直接亏损。
  • 规范数据预处理:若要构建机器学习模型,先完成数据清洗(填充缺失值、归一化),筛选有效特征(如收盘价、成交量、MACD、布林带等)。
  • 严格风险控制:无论用何种模型,必须添加止损止盈逻辑,比如设置单笔交易最大亏损不超过总资金的2%,避免单次交易导致账户大幅亏损。

内容的提问来源于stack exchange,提问作者DepressedUnicorn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 01:23:27