You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker环境下Python使用socketserver运行代码报AttributeError: __exit__求助

问题解决方法

报错根因

你遇到的AttributeError: __exit__报错,是因为当前运行环境的Python版本低于3.3。socketserver.TCPServer从Python3.3版本才开始支持上下文管理器(即with语句的用法),低于该版本的Python中TCPServer没有实现上下文管理所需的__enter__和__exit__方法,因此无法放在with语句中使用。

修复方案

方案1:适配低版本Python(无需升级环境)

去掉服务端的with语句,手动管理服务的生命周期即可,同时注意Docker部署时的绑定地址问题:

if __name__ == "__main__":
    # Docker环境下必须绑定0.0.0.0才能被容器外部访问,不能用localhost
    HOST, PORT = "0.0.0.0", 58333
    server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
    try:
        server.serve_forever()
    except KeyboardInterrupt:
        # 处理Ctrl-C中断信号
        pass
    finally:
        # 手动关闭服务释放端口
        server.server_close()

方案2:升级Python版本

将运行环境的Python版本升级到3.3及以上,原有代码无需修改即可正常运行。

额外注意事项

  • 客户端最后一行代码存在格式问题:服务端返回的是字符串类型的索引数字,不是JSON格式,因此不需要调用json.loads(),直接输出received即可,否则会触发JSON解析报错。
  • Docker部署时需要将容器的58333端口映射到宿主机端口,同时客户端的连接地址要改成宿主机的IP或者容器的IP,不能用localhost。

内容的提问来源于stack exchange,提问作者Tennis Tubbies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:09:05