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

向Binance API传递变量调用get_asset_balance()失败问题求助

问题描述

我需要获取两种资产的余额,为了只输入一次交易对,编写了以下代码:

crypto = 'BTC' #coin
base = 'USDT'  # stable-coin
symbol = crypto+base

调用接口时,以下代码能正常返回数据:

base_Bal_p = client.get_asset_balance(asset=base, timestamp=timestamp, recvWindow=recvWindow)

但使用crypto变量传参时触发报错:

crypto_Bal_p = client.get_asset_balance(asset=crypto, timestamp=timestamp, recvWindow=recvWindow)

错误信息:

AttributeError: 'DataFrame' object has no attribute 'lower'

直接写死字符串却能正常运行:

crypto_Bal_p = client.get_asset_balance(asset='BTC', timestamp=timestamp, recvWindow=recvWindow)

原因分析

报错说明你的crypto变量在后续代码中被重新赋值成了DataFrame类型,不再是最初定义的字符串'BTC'。接口内部会对asset参数调用.lower()方法做格式处理,但DataFrame对象没有这个方法,因此抛出错误。

解决方法

  1. 检查变量赋值:查找crypto = 'BTC'之后的所有代码,确认是否存在将crypto重新赋值为DataFrame的操作(比如crypto = pd.DataFrame(...),或是把接口返回的DataFrame直接赋值给了该变量)。

  2. 分离变量用途:如果需要保留crypto作为DataFrame的变量名,将字符串类型的资产符号单独存入新变量:

    crypto_symbol = 'BTC'
    crypto = some_dataframe_operation() # 此处用crypto存储DataFrame
    # 调用接口时使用字符串变量
    crypto_Bal_p = client.get_asset_balance(asset=crypto_symbol, timestamp=timestamp, recvWindow=recvWindow)
    
  3. 强制类型转换(应急方案):如果crypto是仅含单个值的DataFrame,可在调用接口时强制转为字符串:

    crypto_Bal_p = client.get_asset_balance(asset=str(crypto.iloc[0]), timestamp=timestamp, recvWindow=recvWindow)
    

    但更推荐第一种方法,避免变量名混淆引发后续问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 00:09:55