我正在尝试学习python。我写这个脚本来检查互联网连接
import os
import urllib2
from time import sleep
REMOTE_SERVER = "www.google.co.uk"
def is_connected():
try:
# see if we can resolve the host name -- tells us if there is
# a DNS listening
host = socket.gethostbyname(REMOTE_SERVER)
# connect to the host -- tells us if the host is actually
# reachable
s = socket.create_connection((host, 80), 2)
return True
except:
pass
return False
while(1):
if is_connected() == False:
print is_connected()
sleep(10)
问题是即使我连接到互联网,此脚本也会返回false。我可以ping www.google.co.uk但这个脚本只返回false。任何想法???
答案 0 :(得分:6)
由于您尚未导入socket
,因此您对socket.gethostbyname
的引用将因NameError而失败。但是你在try / except块中捕获并静默每个异常,包括那个非常错误。除了首先,你永远不应该做空白,特别是永远不要只有pass
。
删除try / except,或将其限制为您知道可以处理的异常。
答案 1 :(得分:2)
基本上,永远不要这样做:
try:
something()
except:
pass
如果您记得,那么Python的等价物就是好的Visual Basic anti-pattern:
On Error Resume Next
导致无法维护且无法调试代码。只是因为当问题出现时,你不知道发生了什么(你甚至不知道有任何问题)。
在您的特定情况下,我建议您删除try / except块,以便您可以知道在回溯中引发了哪个异常。然后,您将能够解决它。