Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 套接字错误。属性错误:';非类型';对象没有属性';听一听';_Python_Sockets - Fatal编程技术网

Python 套接字错误。属性错误:';非类型';对象没有属性';听一听';

Python 套接字错误。属性错误:';非类型';对象没有属性';听一听';,python,sockets,Python,Sockets,我正在尝试编写一个简单的TCP套接字服务器 我得到了这个错误: File "patch", line 9, in __init__ self.__SocketServer__.listen(1) AttributeError: 'NoneType' object has no attribute 'listen' 我不明白为什么 代码: socket.bind()返回None。不要将其重新分配给套接字属性: self.__SocketServer__ = socket.socket

我正在尝试编写一个简单的TCP套接字服务器

我得到了这个错误:

  File "patch", line 9, in __init__
    self.__SocketServer__.listen(1)
AttributeError: 'NoneType' object has no attribute 'listen'
我不明白为什么

代码:

socket.bind()
返回
None
。不要将其重新分配给套接字属性:

self.__SocketServer__ = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.__SocketServer__.bind((self.__ip__, self.__port__))
self.__SocketServer__.listen(1)
另请注意:不要在自己的项目中使用
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu双下划线
名称。Python自己使用

如果要将名称标记为实例的内部名称,请在名称的开头使用单下划线。Python类没有隐私模型,所有属性都可以从外部访问

因此,这就足够了:

class DataManager:
    def __init__(self):
        self._port = 2121
        self._ip = "127.0.0.1"

        self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._socket.bind((self._ip, self._port))
        self._socket.listen(1)

        self._log("Waiting car connection...")
        self._connection, addr = self._socket.accept()
        self._log("Car socket connected")
        self._connection = None

我对套接字和连接使用了更常用的名称,同时也遵守了。

我可以问一下为什么您对所有内容都使用
\uuuuu双下划线\uuu
名称吗?Python.@MartijnPieters,用于私有类成员。有问题吗?私有变量使用了
\u单下划线
s。是的,不要将
\u名称
名称用于您自己的属性。只需使用
\u name
,在开头加一个下划线即可。Python没有隐私模型,只是一个使用名称的惯例。哦,抱歉,伙计们,我是Python的新手,我的主要语言是C++和java:D。
class DataManager:
    def __init__(self):
        self._port = 2121
        self._ip = "127.0.0.1"

        self._socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self._socket.bind((self._ip, self._port))
        self._socket.listen(1)

        self._log("Waiting car connection...")
        self._connection, addr = self._socket.accept()
        self._log("Car socket connected")
        self._connection = None