python - 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 块中,只处理异常,然后重新启动轮询,但这似乎是一个肮脏的我不知道实际做什么的解决方案,因为它是.
代码在这里。
解决方案
推荐阅读
- javascript - 将 HTML 标记替换为包含标记属性的字符串
- c# - 自定义模型绑定将子属性设置为 null
- javascript - 初始渲染后不会触发 useEffect
- swift - Socket.io Javascript 向 Swift 发出
- python - 意图不适用于 discord.py 命令扩展
- rust - 从函数返回未来生成的闭包
- c# - C#给定一个数字,在列表嵌套的那个级别获取值
- python - tkinter 列表索引超出范围
- python - 有没有办法获得逐行控制台输出并将其打印在单独的脚本中?
- php - 生产环境时如何从远程git加载composer包,开发环境时如何从本地包加载?