Как справиться с "Getaddrinfo не удалось"? - PullRequest
3 голосов
/ 30 января 2011

Привет, у меня проблема.Я использую Mechanize, Python 2.7 для подключения некоторых сайтов (код не важен сейчас), у меня есть список сайтов, и я подключаюсь к ним один сейчас.Когда это происходит, сайт из моего списка не существует, я получаю сообщение об ошибке:

urllib2.URLError: [Errno 11004] сбой getaddrinfo

Я пытался обработать его с помощьюделать это:

             except mechanize.URLError, e:
                    result = str(e.reason)

или

             except urllib2.URLError, e:
                    result = str(e.reason)

или даже

             except Exception, e:
                    result = str(e)

Но это просто не хочет работать.

Какрешить это?Когда эта ошибка происходит, я просто хочу напечатать что-то вроде «сбой соединения» и перейти к следующему адресу в списке.Как отловить эту ошибку по except?

Ответы [ 2 ]

7 голосов
/ 30 января 2011

Случайное предположение, но попробуйте:

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]
2 голосов
/ 30 января 2011

Просто сделай

except urrlib2.URLError:
    print "Connection failed"
    continue # NOTE: This assumes this is in a loop. If not, substitute for return

Большинство библиотек Python сообщают вам тип исключения в отчете об ошибке, в данном случае urllib2.URLError, так что это действительно то, для чего вы except.

Однако, если except Exception: не работает для вас, у вас более серьезные проблемы, чем при вводе неверного веб-адреса пользователем (при условии, что это не ошибка urllib2).

...