首页 > 解决方案 > pyTelegramBotAPI 不断崩溃

问题描述

我的基于 pyTelegramBotAPI 的程序不断崩溃。我将我的代码压缩为最小的可重现示例,它仍然在不断发生。问题是发生了错误,并且在处理此错误期间,又发生了另一个错误。这种情况持续了 2-3 次,直到程序最终崩溃。它只是在我运行程序 10 分钟或更长时间后随机发生。我是否通过电报向程序发送命令都没有区别。这是错误日志:

Traceback (most recent call last):
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Python\Python37-32\lib\http\client.py", line 1321, in getresponse
    response.begin()
  File "C:\Python\Python37-32\lib\http\client.py", line 296, in begin
    version, status, reason = self._read_status()
  File "C:\Python\Python37-32\lib\http\client.py", line 257, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Python\Python37-32\lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
  File "C:\Python\Python37-32\lib\ssl.py", line 1052, in recv_into
    return self.read(nbytes, buffer)
  File "C:\Python\Python37-32\lib\ssl.py", line 911, in read
    return self._sslobj.read(len, buffer)
ConnectionResetError: [WinError 10054] An existing connection was forcibly closed by the remote host

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\requests\adapters.py", line 449, in send
    timeout=timeout
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 756, in urlopen
    method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\util\retry.py", line 532, in increment
    raise six.reraise(type(error), error, _stacktrace)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\packages\six.py", line 769, in reraise
    raise value.with_traceback(tb)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 706, in urlopen
    chunked=chunked,
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 445, in _make_request
    six.raise_from(e, None)
  File "<string>", line 3, in raise_from
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\urllib3\connectionpool.py", line 440, in _make_request
    httplib_response = conn.getresponse()
  File "C:\Python\Python37-32\lib\http\client.py", line 1321, in getresponse
    response.begin()
  File "C:\Python\Python37-32\lib\http\client.py", line 296, in begin
    version, status, reason = self._read_status()
  File "C:\Python\Python37-32\lib\http\client.py", line 257, in _read_status
    line = str(self.fp.readline(_MAXLINE + 1), "iso-8859-1")
  File "C:\Python\Python37-32\lib\socket.py", line 589, in readinto
    return self._sock.recv_into(b)
  File "C:\Python\Python37-32\lib\ssl.py", line 1052, in recv_into
    return self.read(nbytes, buffer)
  File "C:\Python\Python37-32\lib\ssl.py", line 911, in read
    return self._sslobj.read(len, buffer)
urllib3.exceptions.ProtocolError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:/Users/gebruiker/Google Drive/CnCreate/Projecten/GO-Sharing/main.py", line 587, in <module>
    bot.polling(non_stop=True)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\__init__.py", line 633, in polling
    self.__threaded_polling(non_stop, interval, timeout, long_polling_timeout, allowed_updates)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\__init__.py", line 692, in __threaded_polling
    raise e
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\__init__.py", line 654, in __threaded_polling
    polling_thread.raise_exceptions()
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\util.py", line 100, in raise_exceptions
    raise self.exception_info
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\util.py", line 82, in run
    task(*args, **kwargs)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\__init__.py", line 393, in __retrieve_updates
    timeout=timeout, long_polling_timeout=long_polling_timeout)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\__init__.py", line 371, in get_updates
    json_updates = apihelper.get_updates(self.token, offset, limit, timeout, allowed_updates, long_polling_timeout)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\apihelper.py", line 312, in get_updates
    return _make_request(token, method_url, params=payload)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\telebot\apihelper.py", line 141, in _make_request
    timeout=(connect_timeout, read_timeout), proxies=proxy)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\requests\sessions.py", line 542, in request
    resp = self.send(prep, **send_kwargs)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\requests\sessions.py", line 655, in send
    r = adapter.send(request, **kwargs)
  File "C:\Users\gebruiker\Google Drive\CnCreate\Projecten\GO-Sharing\venv\lib\site-packages\requests\adapters.py", line 498, in send
    raise ConnectionError(err, request=request)
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'An existing connection was forcibly closed by the remote host', None, 10054, None))

我还将尝试 infinity_polling() 并在这里报告结果如何。但我相信有些事情是错误的,因为 polling() 不应该像那样崩溃。我正在考虑将轮询函数封装在一个 try-exception 块中,只处理异常,然后重新启动轮询,但这似乎是一个肮脏的我不知道实际做什么的解决方案,因为它是.

代码在这里

标签: pythonexceptionpy-telegram-bot-api

解决方案


推荐阅读