当前位置: 首页 > 知识库问答 >
问题:

当二进制api(连接)错误发生时,无法继续程序

方树
2023-03-14

我正在通过AWS-EC2上的Binance api从Binance获取OHLCV数据。但有时(几天一次)会出现错误“104,‘EconReset’”,程序停止。

该程序是用Python3.7.3编写的,在AWS-EC2上运行

代码如下。但此代码无法继续。

我想在出现任何api或连接错误时继续运行程序。

我应该如何处理这个错误?

while True:

    ..............

    try :
        klines = client.get_historical_klines(ticker_symbol, Client.KLINE_INTERVAL_1MINUTE, _from_str, _until_str)

    except BinanceAPIException as e:
        print(e)
        print('Something went wrong. Error occured at %s. Wait for 1 hour.' % (datetime.datetime.now().astimezone(timezone('UTC'))))
        sleep(3600)
        continue

    ..............

所有错误质量如下所示。

Traceback(最近一次调用最后):File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/urllib3/connectionpool.py",第600行,在urlopenchunked=chunked中)File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/urllib3/connectionpool.py",第384行,_make_requestsix.raise_from(e,无)File",第2行,raise_fromFile"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/urllib3/connectionpool.py",第380行,_make_requesthttplib_response=conn.getresponse()File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/超文本传输协议/client.py",第1321行,在get响应response.begin()File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/超文本传输协议/client.py",第296行,在开始版本,状态,原因=自我。_read_status()File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/超文本传输协议/client.py",第257行,_read_statusline=str(self.fp.readline(_MAXLINE1),"iso-8859-1")File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/socket.py",第589行,在readinto返回自己中。_sock.recv_into(b)File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/site-包/urllib3/contrib/pyopenssl.py",第312行,recv_into返回self.recv_into(*args,**kwargs)File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/urllib3/contrib/pyopenssl.py",第302行,在recv_into提高SocketError(str(e))OSError:(104,'ECONNRESET')

在处理上述异常时,发生了另一个异常:

回溯(最近一次调用):文件“/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/requests/adapters.py”,第449行,在发送超时=超时文件“/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urllib3/connectionpool.py”中,第638行,在urlopen\u stacktrace=sys.exc\u info()文件中“/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urllib3/util/retry.py”,第368行,增量提升六个.reraise(类型(错误),错误,_stacktrace)文件/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urlib3/packages/six.py”,第685行,重新提升值/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urllib3/connectionpool.py”,第600行,在urlopen chunked=chunked)文件中“/home/ec2 user/.pyenv/versions/3.7/site packages/urllib3/connectionpool.py”,第384行,在“请求六次从(e,无)文件”中,第2行,在“从文件”中/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urllib3/connectionpool.py”,第380行,在getresponse.begin()文件“/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/http/client.py”第1321行,在getresponse response.begin()文件“/home/ec2 user/.pyenv/versions/3.3.7/client.python3.7/http/client.py”中,第296行,在begin version,status,reason=self.\u read\u status()文件/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/http/client.py“,第257行,\u read\u status line=str(self.fp.readline(\u MAXLINE 1),“iso-8859-1”)文件/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/socket”,第589行,在readinto中返回self.\sock.recv文件“/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urllib3/contrib/pyopenssl.py”,第312行,在recv_中返回self.recv_到(*args,**kwargs)文件“/home/ec2 user/.pyenv/versions/3.7.3/lib/python3.7/site packages/urllib3/contrib/pyopenssl.py”,第302行,在recv_中插入raise(str(e))urllib3.exceptions.ProtocolError:('Connection aborted',OSError('104'ECONNRESET'))

在处理上述异常时,发生了另一个异常:

Traceback(最近一次调用最后一次): File"BTC_USDT_BINANCE_minutes.py",第54行,单位为k线=client.get_historical_klines(ticker_symbol,客户端。KLINE_INTERVAL_1MINUTE,_from_str,_until_str)File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/binance/client.py",第765行,get_historical_klinesfirst_valid_ts=自己。_get_earliest_valid_timestamp(符号,间隔)File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/binance/client.py",第723行,在_get_earliest_valid_timestampendTime=无文件"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/site-包/binance/client.py",第705行,在get_klines返回自己。_get('kline',data=params)File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/site-包/binance/client.py",第207行,_get返回自己。_request_api('get',路径,签名,版本,**kwargs)File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/binance/client.py",行181,_request_api返回自己。_request(方法,uri,签名,**kwargs)文件"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/site-包/binance/client.py",第175行,_request响应=getattr(self.session,方法)(uri,**kwargs)File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/site-包/请求/sessions.py",第546行,在获取返回self.request('GET',url,**kwargs)File"/home/ec2-user/. pyenv/版本/3.7.3/lib/python3.7/site-包/请求/sessions.py",第533行,在请求resp=self.send(prep,**send_kwargs)File"/home/ec2-user/. pyenv/version/3.7.3/lib/python3.7/site-包/请求/sessions.py",第646行,在发送r=<##############################################################################################################################################################################"(104,'ECONNRESET')")

共有1个答案

漆雕令秋
2023-03-14

假设您正在使用python-binance模块,很可能会发生错误,因为您试图在长时间(服务器超时)后重用客户端。您可以尝试先重新创建客户端

...
client = Client(api_key, api_secret)
while True:
    ...
    try :
        klines = client.get_historical_klines(ticker_symbol, Client.KLINE_INTERVAL_1MINUTE, _from_str, _until_str)

    except BinanceAPIException as e:
        print(e)
        print('Something went wrong. Error occured at %s. Wait for 1 hour.' % (datetime.datetime.now().astimezone(timezone('UTC'))))
        sleep(3600)
        client = Client(api_key, api_secret)
        continue
...

原因是[Client][2]在下面使用请求会话,这意味着使用urlib3的连接池。超时后无法重新使用此连接池。

 类似资料:
  • 我正在使用maven项目运行selenium测试,但是当我运行测试文件时,我收到了错误:无法连接到二进制FirefoxBinary(C:\Program Files(x86)\Mozilla Firefox\Firefox)。在端口7055上。它打开FF an的空白页,然后测试结果抛出错误: 这些是我的文件: 我有FireFox 51.0和selenium-java 2.45.0(jar)。

  • 问题内容: 在Windows上安装了Docker,并额外安装了2个Oracle VM VirualBox和Kitematic。我在Windows 10 PC中禁用了Hyper-V。现在的问题是我无法从DockerHub下载任何Docker映像,甚至我都无法以如下方式运行命令 两端都显示以下错误。 尝试连接时发生错误:获取 http:// localhost:2375 / v1.21 / info

  • 我最近安装了Caffe以及OpenCV和其他依赖项。Pycharm运行了两天,今天我不能再在Pycharm中启动Python控制台了。我可以毫无问题地在终端启动python。。。每次我尝试启动Python控制台时,都需要一段时间才能“连接到控制台”,然后我会得到以下结果: /Users/myname/anaconda/bin/python"/应用程序/PyCharm CE. app/内容/助手/p

  • 问题内容: 我正在尝试实现一个简单的查询,如下所示: 很简单:我想得到合并结果,然后限制为12。 在Sequelize中,我使用以下功能: 但是此代码生成以下sql: 这与我尝试执行的逻辑完全不同,因为在生成的sql中,它首先获取任何12个结果,然后尝试与entity_area联接,当然,随机的12个结果不一定与entity_area匹配,所以我我没有得到任何结果。 请建议我这样做的正确方法。属性

  • 我尝试运行命令,结果出现以下错误。在阅读了一些stackoverflow帖子后,我还运行了。 我仍然得到gem的问题(我猜)。 安装json(1.8.6)时出错,Bundler无法继续。在捆绑之前,请确保成功。这里的问题是没有正确完成安装。

  • 每个套接字地址(协议/网络地址/端口)通常只允许使用一次。有人能帮我吗 我尝试过许多建议但没有一个奏效