Возникла ошибка при возникновении исключения для urllib2.urlopen () - PullRequest
3 голосов
/ 24 июля 2011

Я использую следующий код и не могу понять, почему он не вызывает исключение, когда urlopen () не работает ..

В моем конкретном случае я знаю, почему он не работает ..У моего URL нет http: // перед ними ... но я хочу отследить эти случаи, чтобы скрипт мог продолжать выполнять мой код, а не выходить.

    req = urllib2.Request(link)
    try:
        url = urllib2.urlopen(req)
    except urllib2.URLError, e:
        print e.code
        print e.read()
        return False

и яполучение ..

Traceback (most recent call last):
File "./getURLs.py", line 141, in <module>
main()
File "./getURLs.py", line 82, in main
Process(args).get_children()
File "./getURLs.py", line 65, in get_children
self.get_links(link)
File "./getURLs.py", line 46, in get_links
data = urllib2.urlopen(req)
File "/usr/local/lib/python2.7/urllib2.py", line 126, in urlopen
return _opener.open(url, data, timeout)
File "/usr/local/lib/python2.7/urllib2.py", line 383, in open
protocol = req.get_type()
File "/usr/local/lib/python2.7/urllib2.py", line 244, in get_type
raise ValueError, "unknown url type: %s" % self.__original
ValueError: unknown url type: /

.,.

Решение

для всех, кто интересуется моим конкретным решением. Я использую следующее, чтобы перехватить оба исключения.

req = urllib2.Request(link)
    try:
        url = urllib2.urlopen(req)
    except (ValueError,urllib2.URLError) as e:
        print e
        return False

1 Ответ

6 голосов
/ 24 июля 2011

Из того, что вы вставили, похоже, что вы ловите неправильный тип исключения.В коде должно быть написано

try:
    url=urllib2.urlopen(req)
except ValueError:
    # etc etc etc.

Если важно, чтобы весь код выполнялся полностью, у вас также может быть простое исключение: с неопределенным типом исключения или даже наконец.Смотри: http://docs.python.org/tutorial/errors.html

...