我正在尝试使用Python中的“ try / except”块跳过超时的套接字。下面是该代码块的代码段
s.settimeout(1)
s.sendto(NTP_QUERY, (host, port))
try:
msg, address = s.recvfrom(1024)
s.settimeout(None)
except:
pass
我的想法是,如果settimeout()变为true,它将通过except。有什么我想念的,谢谢您的所有帮助。我的输出是“ UnboundLocalError:分配前已引用本地变量'msg'”
答案 0 :(得分:2)
来自Python文档
设置阻止套接字操作的超时。 value参数可以是表示秒的非负浮点数,也可以是None。如果给出一个非零值,则如果在操作完成之前已经超过了超时时间,则后续的套接字操作将引发超时异常。如果给定零,则将套接字置于非阻塞模式。如果未指定,则套接字将处于阻塞模式。
(对于您的代码而言)意味着:
sendto
和recvfrom
都将在超时时引发异常recvfrom
中的一个