Binance API连接超时等三类错误求助(附代码及尝试方案)
解决Binance API连接与超时问题
优化后的完整代码
from binance.client import Client from time import sleep import requests from requests.adapters import HTTPAdapter from urllib3.util.retry import Retry API_KEY = "---" API_SECRET = "---" def create_binance_client(): # 配置自动重试策略 session = requests.Session() retry = Retry( total=5, backoff_factor=1, status_forcelist=[429, 500, 502, 503, 504], allowed_methods=["GET"] ) adapter = HTTPAdapter(max_retries=retry) session.mount("https://", adapter) # 创建带自定义会话的Client,延长读取超时 client = Client(API_KEY, API_SECRET, requests_session=session) client.API_TIMEOUT = 30 # 将默认10秒超时改为30秒 return client def hist_data(): client = create_binance_client() while True: try: candle = client.get_historical_klines('BTCUSDT', '5m', '15m ago UTC') print(candle) sleep(30) # 添加请求间隔,避免触发API限流 except requests.exceptions.ConnectionError as e: print(f"连接错误: {e}") sleep(15) client = create_binance_client() # 重建客户端连接 except requests.exceptions.ReadTimeout as e: print(f"读取超时: {e}") sleep(15) client = create_binance_client() except Exception as e: print(f"其他错误: {e}") sleep(10) hist_data()
三类错误的针对性解决说明
1. 连接中止错误 (ConnectionAbortedError)
你原有的pass处理能让程序继续运行,但更严谨的方式是捕获特定连接异常,而非泛用Exception,同时在错误后重建客户端连接——避免复用已失效的连接实例。优化代码中专门捕获requests.exceptions.ConnectionError,并调用create_binance_client()生成新的连接。
2. ReadTimeout 读取超时错误
这类错误源于默认10秒的读取超时过短,且缺乏自动重试机制。解决核心:
- 延长API读取超时至30秒,给服务器足够响应时间
- 添加自动重试策略,针对5xx服务器错误、429限流错误自动重试,且重试间隔随次数递增(通过
backoff_factor实现) - 超时后重建Client,确保使用全新的会话连接
3. 最大重试超限/无法解析主机名错误
当网络持续不可用时,频繁重试只会耗尽重试次数。优化方案:
- 通过
backoff_factor实现退避式重试,每次重试间隔递增(1s→2s→4s…),给网络恢复留出时间 - 捕获错误后等待15秒再重建连接,避免立刻重试
- 每次错误后创建全新的Client实例,抛弃之前的无效会话
额外优化点
- 移除
global变量管理Client,改用函数创建实例,避免全局状态污染 - 添加请求间隔(
sleep(30)),遵守Binance API限流规则,降低被封禁风险 - 优先捕获特定异常类型,精准处理不同错误场景,避免掩盖未知问题
内容的提问来源于stack exchange,提问作者Shankar
相关产品推荐
相关产品推荐

