2014-12-26 144 views
1

我正在学习python。这是一个脚本,我写了检查互联网连接即使连接了互联网,Python也会返回False

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) 

的问题是,这个脚本返回即使我连接到互联网虚假。我可以ping www.google.co.uk但这个脚本只是返回false。有任何想法吗???

+2

在'除''块'印刷'异常,而不是'通过'它 –

+2

这不是一个很好的测试,即使它不太可能发生,如果谷歌失败怎么办 – meda

回答

6

由于您尚未导入socket,因此您对socket.gethostbyname的引用将失败并出现NameError错误。但是,您在尝试/除外的区块中会捕获并沉默每一个例外,包括那个非常错误。你永远不应该做一个空白,除非在第一个地方,特别是永远不要只有pass

删除该尝试/除外,或将其限制为您可以处理的异常。

+0

感谢他的工作。 –

2

基本上,从来没有做到这一点:

try: 
    something() 
except: 
    pass 

这是Python相当于good'ol的Visual Basic anti-pattern的,如果你还记得:

On Error Resume Next 

通往不可维护的,也不可能调试代码。只是因为当问题出现时,你不知道发生了什么(甚至根本不知道有什么问题)。

在您的具体情况下,我建议您删除try/except块,以便您可以知道在回溯中引发了哪个异常。然后,你将能够修复它。

+0

谢谢,因为我从C#移动我被使用在Visual Studio中使用带有断点的Try Catch,但我会记住您对未来的建议。 –

相关问题