即使连接了互联网,Python也会返回False

时间:2014-12-26 18:03:57

标签: python

我正在尝试学习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。任何想法???

2 个答案:

答案 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块,以便您可以知道在回溯中引发了哪个异常。然后,您将能够解决它。