как да се справя с getaddrinfo неуспешно?

Здравейте, имам проблем. използвам mechanize, 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: ще работи. Проблем с Python?   -  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