socket.settimeout 退出不使用 EXCEPT 子句的程序



我有下面的python代码,没有收到任何数据,程序在没有运行带有print和return语句的EXCEPTION子句的情况下退出

对正在发生的事情有什么想法吗?

sock.settimeout(10)
try:
    pkt = sock.recv(255)
except socket.error:
    print "connection timed out!"
    return

问题是socket.timeout异常是与socket.error完全不同的异常。因此,except socket.error:没有抓住socket.timeout的原因except ValueError:没有抓住KeyError

(这方面的文档在 2.x 中并不十分明显。这是在 Python 3.3/PEP 3151 中清理的众多内容之一——请参阅不错的新文档——但只要你坚持使用 2.x,你就不会从中受益。

正确的

解决方案是处理正确的错误:

sock.settimeout(10)
try:
    pkt = sock.recv(255)
except socket.timeout:
    print "connection timed out!"
    return

如果您还想以相同的方式处理套接字错误(例如,recv调用失败):

sock.settimeout(10)
try:
    pkt = sock.recv(255)
except (socket.timeout, socket.error) as e:
    print "connection timed out or erred out: {}!".format(e)
    return

请注意,我还添加了as e并将其添加到输出中。这样,如果出现意外问题,您就会知道出了什么问题,而不必猜测。

当然,您可能还希望以不同的方式处理这两个错误:

sock.settimeout(10)
try:
    pkt = sock.recv(255)
except socket.timeout:
    print "connection timed out!"
    return
except socket.error as e:
    print "connection erred out: {}!".format(e)
    return
sock.settimeout(10)
try:
    pkt = sock.recv(255)
except:
    print "connection timed out!"
    return

我刚刚更改了除行

相关内容

  • 没有找到相关文章

最新更新