向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对象没有这个方法,因此抛出错误。
解决方法
检查变量赋值:查找
crypto = 'BTC'之后的所有代码,确认是否存在将crypto重新赋值为DataFrame的操作(比如crypto = pd.DataFrame(...),或是把接口返回的DataFrame直接赋值给了该变量)。分离变量用途:如果需要保留
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)强制类型转换(应急方案):如果
crypto是仅含单个值的DataFrame,可在调用接口时强制转为字符串:crypto_Bal_p = client.get_asset_balance(asset=str(crypto.iloc[0]), timestamp=timestamp, recvWindow=recvWindow)但更推荐第一种方法,避免变量名混淆引发后续问题。
内容的提问来源于stack exchange,提问作者octoma
相关产品推荐
相关产品推荐

