我有下面的python代码,没有收到数据,程序退出而没有运行带有print和return语句的except子句
有关正在发生的事情的任何想法?
sock.settimeout(10)
try:
pkt = sock.recv(255)
except socket.error:
print "connection timed out!"
return
答案 0 :(得分:1)
问题是socket.timeout
例外与socket.error
完全不同。因此,except socket.error:
因socket.timeout
没有抓住except ValueError:
而导致KeyError
无法抓住sock.settimeout(10)
try:
pkt = sock.recv(255)
except socket.timeout:
print "connection timed out!"
return
。
(这个文档在2.x中并不是很明显。这是在Python 3.3 / PEP 3151中清理过的很多东西之一 - 见the nice new docs - 但只要你和& #39;坚持2.x你不会从中受益。)
正确的解决方案是处理正确的错误:
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
并将其添加到输出中。这样,如果出现意外情况,您就会知道 出错了什么,而不必猜测。
当然,您可能也希望以不同方式处理这两个错误:
{{1}}
答案 1 :(得分:-1)
sock.settimeout(10)
try:
pkt = sock.recv(255)
except:
print "connection timed out!"
return
我刚刚更改了除行