使用socket.socket(socket.AF_INET,socket.SOCK_STREAM)为s:获取错误:AttributeError:__exit__

时间:2019-04-13 03:08:32

标签: python

我有一个套接字服务器程序:

#!/usr/bin/env python
#-*- coding:utf-8 -*-
# Author:sele


import socket

HOST = '127.0.0.1'
PORT = 65432

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()
    conn, addr = s.accept()
    with conn:
        print('Connected by', addr)
        while True:
            data = conn.recv(1024)
            if not data:
                break

            conn.sendall(data)

当我在终端上运行它时

出现错误:

  

sele-MacBook-Pro:test01 ldl $ ./tests02-server.py
      追溯(最近一次通话):
        
中的文件“ ./tests02-server.py”,第11行           使用socket.socket(socket.AF_INET,socket.SOCK_STREAM)为s:
      AttributeError:退出

为什么会出现此错误?

2 个答案:

答案 0 :(得分:1)

您可能已经知道了这一点,但是如果以以下方式从终端运行脚本,则不会收到错误:〜$ python3 echo-server.py

答案 1 :(得分:0)

您不能将socket.socket(socket.AF_INET, socket.SOCK_STREAM)with一起使用。为了使with语句可以清理正在使用的资源,该资源的对象必须具有__exit__方法。 socket.socket(socket.AF_INET, socket.SOCK_STREAM)返回的内容显然没有__exit__可以调用的with方法,因此出现此错误。

每个@jasonharper,如果您使用的是Python3,这听起来似乎可行。也许您是从某个地方复制了Python3代码,但正在运行Python 2.7?