поймать конкретную ошибку HTTP в python
Я хочу поймать конкретную ошибку http, а не кого-либо из всей семьи..
что я пытался сделать это...
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>
но то, что я в конечном итоге ловлю любую ошибку http, но я хочу поймать только если указанная веб-страница не существует!! вероятно, это ошибка HTTP 404..но я не знаю, как указать, что поймать только ошибку 404 и пусть система запускает обработчик по умолчанию для других событий..предложения Нью-Йорк??
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