select.select() 参数文件描述符不能是负整数错误

Jef*_*tle 5 python sockets select server

我正在 python 3.6.1 中开发一个简单的聊天应用程序供个人使用。我在 select.select 时遇到此错误:

Traceback (most recent call last):
  File "C:\Users\Nathan Glover\Google Drive\MAGENTA Chat\chat_server.py", line 
27, in <module>
    ready_to_read,ready_to_write,in_error = select.select(SOCKET_LIST,[],[],0)
ValueError: file descriptor cannot be a negative integer (-1)
Run Code Online (Sandbox Code Playgroud)

这是代码:

    ready_to_read,ready_to_write,in_error = select.select(SOCKET_LIST,[],[],0)
Run Code Online (Sandbox Code Playgroud)

这完全是因为我不太了解 select ,并且文档没有帮助。有人可以解释为什么会发生这种情况吗?

the*_*xed 8

我知道这个问题已经很久没有被问到了。但我想让OP和其他人知道这里的问题。这里的问题是 SOCKET_LIST 必须包含一个不存在的套接字连接,该连接可能已在之前断开。如果您通过这样的连接来选择它会出现此错误

ValueError: file descriptor cannot be a negative integer (-1)
Run Code Online (Sandbox Code Playgroud)

对此的一个简单解决方案是将select块放入 try - except 块中并捕获错误。当发现错误时,可以从 SOCKET_LIST 中删除该连接。