AttributeError:在python-3.4.3上使用socketserver的__exit__

时间:2018-01-02 05:14:49

标签: python python-3.x

我有两个系统

  1. 运行python 3.6.3的Mac系统
  2. 运行python 3.4.3的linux(ubuntu 14.04)系统
  3. 我一直在测试两个系统上的以下代码段,以尝试找出ubuntu系统上的错误原因。

    import urllib.request
    import http.server
    import socketserver
    PORT = 8000
    
    def requestHandler(request, client_address,server):
        # test to print to console when the handler is invoked. 
        print("Request = " + str(request) + " Client Address = " + str(client_address) + " Server = " + str(server))
    
    def startWebServer():
        Handler = requestHandler
        with socketserver.TCPServer(("", PORT), Handler) as httpd:
            print("serving at port", PORT)
            httpd.serve_forever()
    
    def main():
        startWebServer()
    
    main()
    

    在Mac上,这可以按预期工作,调用requestHandler并将信息打印到控制台。

    但是,在ubuntu系统上,我收到以下错误。

    Traceback (most recent call last):
      File "sockettest.py", line 19, in <module>
        main()
      File "sockettest.py", line 17, in main
        startWebServer()
      File "sockettest.py", line 12, in startWebServer
        with socketserver.TCPServer(("", PORT), Handler) as httpd:
    AttributeError: __exit__
    

    我怀疑我错误配置了ubuntu python安装。

    你可以建议我做错了吗?

1 个答案:

答案 0 :(得分:5)

在Python 3.6之前,

socketserver服务器不支持用作上下文管理器。引用docs

  

版本3.6中已更改:添加了对上下文管理器协议的支持。退出上下文管理器等同于调用server_close()。

将来,如果不同的Python版本的行为不同,您应该检查文档以查找记录的版本差异。