Python3:资源警告未关闭

2024-04-18 08:46:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个用Python编写的Reddit Bot,有时会出现以下错误:

sys:1: ResourceWarning: unclosed ssl.SSLSocket fd=4, family=AddressFamily.AF_INET, type=2049, proto=6, laddr=('192.168.1.113', 55513), raddr=('198.41.209.140', 443)>

192.168.1.113是我的本地IP,198.41.209.140显然是CloudFlare的IP

我有时也会遇到以下错误,这让我觉得问题与SSL有关?在

Error EOF occurred in violation of protocol (_ssl.c:598)

如何解决此问题?在

编辑:我如何查看代码的哪一部分导致了此问题?我尝试/除了将所有异常打印为:

except Exception as e:
    print("Login/API Error", e)

但是我得到的所有错误都没有这个,这意味着它不是一个例外?在


Tags: ipsslbot错误syserrorfamilyaf
1条回答
网友
1楼 · 发布于 2024-04-18 08:46:31

我在自己的代码中没有使用过套接字,因此以下内容基于我对Python的一般知识。在

socket文档没有说明socket.socket实例是一个上下文管理器,但是该类具有必需的__enter__和{}方法。两者都是标准的、最小的实现。您可能希望将socket或SSLSocket子类化,以便在__exit__中执行更多操作,例如打印回溯的替代项。但首先,你需要看到完整的回溯。子类SSLSocket继承了这两个方法。由于SSLSocket“包装”了一个套接字,显然有两个对象需要关注。因此,对于代码的顶层结构,我将从以下(显然未经测试)开始:

<preliminary code>
with socket.socket(...) as sock  # or other socket-returning function
  <more preparation>
  with ssl.wrap_socket(sock, ...) as SSLsock # or the context function
    <use SSLsock to communicate>

您收到的错误消息应该以SSLEOFError作为前缀。是吗?doc说“SSLError的一个子类在SSL连接突然终止时引发。通常,当遇到这个错误时,您不应该尝试重用底层传输。“这绝对是一个例外。在

^{2}$

什么会促使Cloudfare“突然”终止连接?协议处理中的错误;错误ssl.py?你的机器人有没有违反服务条款?在

如果您不能在这里得到您需要的所有答案,我将尝试python-list,也可以作为新闻组gmane.comp.python.general访问news.gmane.org。它有具有网络经验的参与者。在

相关问题 更多 >