как справиться с ошибкой getaddrinfo?

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

urllib2.URLError: [Errno 11004] ошибка getaddrinfo

Я попытался справиться с этим, выполнив следующие действия:

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

or

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

или даже

             except Exception, e:
                    result = str(e)

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

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


person RogerZ    schedule 30.01.2011    source источник
comment
что значит не хочет работать? они вызывают больных? опубликовать трассировки.   -  person SilentGhost    schedule 30.01.2011
comment
@SilentGhost Я предполагаю, что это означает, что он не ловит, но даже тогда except Exception: будет работать. Проблема с питоном?   -  person new123456    schedule 30.01.2011
comment
Обратите внимание, что вы можете сделать except Foo as e, так как вы используете 2.7 - более приятный синтаксис, перенесенный из Python 3 :-)   -  person Cameron    schedule 30.01.2011


Ответы (2)


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

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]
person Jochen Ritzel    schedule 30.01.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).

person new123456    schedule 30.01.2011
comment
Старый пост, я знаю, но для всех, кто наткнулся на него, urrlib2.URLError написано с ошибкой. Должно быть urllib2.URLError для Py2 (и urllib.error.URLError для Py3). - person David Metcalfe; 29.01.2017