如何处理“getaddrinfo 失败”?
你好,我遇到了一个问题。我正在用 Python 2.7 的 mechanize 库连接一些网站(现在代码不重要)。我有一个网站列表,我一个一个地连接它们。当我尝试连接列表中的某个网站,但这个网站不存在时,我会收到一个错误:
urllib2.URLError: [Errno 11004] getaddrinfo failed
我试着用以下方法来处理这个问题:
except mechanize.URLError, e:
result = str(e.reason)
或者
except urllib2.URLError, e:
result = str(e.reason)
甚至
except Exception, e:
result = str(e)
但是这些方法都不管用。
我该怎么解决这个问题呢?当出现这个错误时,我只想打印一些像“连接失败”这样的信息,然后继续处理列表中的下一个地址。我该如何通过 except
来捕捉这个错误呢?
2 个回答
3
只需这样做:
except urrlib2.URLError:
print "Connection failed"
continue # NOTE: This assumes this is in a loop. If not, substitute for return
大多数Python库在错误报告中会告诉你错误的类型,比如这里的urllib2.URLError
,所以你确实应该捕获这个错误。
不过,如果except Exception:
对你不起作用,那说明你遇到的问题比用户输入了一个错误的网址要严重得多(假设这不是urllib2的问题)。
10
随便猜一下,但可以试试:
import socket
try:
...
except socket.gaierror:
pass
socket.gaierror
是 "[Errno 11004] getaddrinfo failed"
这个错误。
如果你这样做的话,就能很容易地找出这个异常:
try:
...
except:
import sys
# prints `type(e), e` where `e` is the last exception
print sys.exc_info()[:2]