поймать конкретную ошибку HTTP в python



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



import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>


но то, что я в конечном итоге ловлю любую ошибку http, но я хочу поймать только если указанная веб-страница не существует!! вероятно, это ошибка HTTP 404..но я не знаю, как указать, что поймать только ошибку 404 и пусть система запускает обработчик по умолчанию для других событий..предложения Нью-Йорк??

685   3  

3 ответов:

просто поймать urllib2.HTTPError, обрабатывать его, и если это не ошибка 404, просто используйте raise для повторного вызова исключения.

посмотреть Python tutorial.

Так что вы могли бы сделать:

import urllib2
try:
   urllib2.urlopen("some url")
except urllib2.HTTPError as err:
   if err.code == 404:
       <whatever>
   else:
       raise

Для Python 3.x

import urllib.request
try:
    urllib.request.urlretrieve(url, fullpath)
except urllib.error.HTTPError as err:
    print(err.code)

ответ Тимса кажется мне вводящим в заблуждение. Особенно когда urllib2 не возвращает ожидаемый код. Например, эта ошибка будет фатальной (верьте или нет - это не редкость При загрузке URL-адресов):

AttributeError: объект' URLError 'не имеет атрибута 'code'

быстро, но, возможно, не лучшим решением будет код с использованием вложенного блока try / except:

import urllib2
try:
    urllib2.urlopen("some url")
except urllib2.HTTPError, err:
    try:
        if err.code == 404:
            # Handle the error
        else:
            raise
    except:
        ...

дополнительная информация к теме вложенных блоков try / except являются ли вложенные блоки try / except в python хорошей практикой программирования?

Comments

    Ничего не найдено.