如何处理“getaddrinfo 失败”?

4 投票
2 回答
18421 浏览
提问于 2025-04-16 10:54

你好,我遇到了一个问题。我正在用 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]

撰写回答