Python 3.4,不推荐使用socket.error,是否等效?

Sav*_*ool 5 sockets python-3.x

最初,代码是这样写的:

except socket.error, err:
    print('Socket connection error... Waiting 10 seconds to retry.')
    del self.sock
    time.sleep(10)
    try_count += 1
Run Code Online (Sandbox Code Playgroud)

目的是捕获套接字连接错误,该错误过去曾是错误或类似的错误。

但是,我在以前的回答中看到socket.error从2.6开始不推荐使用。

我还可以确认3.4标记了一个错误,指出它不支持此语法。

是否有人知道3.4的等价物?

dan*_*r89 6

Indeedsocket.error在 Python 3 中已弃用。您现在可以捕获超类 (OSError)。如果需要,您可以在 except 中检查真正引发了哪种类型的异常子类(例如 ECONNREFUSED)。

try:
    ...
except OSError as e:
    ...
Run Code Online (Sandbox Code Playgroud)

请参阅: https: //docs.python.org/3/library/exceptions.html


Eri*_*ric 5

您的问题在于语法,而不是socket.error

此 python 2 代码已弃用:

except Exception, e:
Run Code Online (Sandbox Code Playgroud)

有利于

except Exception as e:
Run Code Online (Sandbox Code Playgroud)

所以你要:

except socket.error as err:
Run Code Online (Sandbox Code Playgroud)