我有下面的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
我刚刚更改了除行