Улавливать определенную ошибку HTTP в python
Я хочу поймать конкретную ошибку HTTP, а не любую из всей семьи.
что я пытался сделать -
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError:
<whatever>
но я в конечном итоге поймаю любую ошибку http, но я хочу поймать, только если указанная веб-страница не существует!! вероятно, что ошибка HTTP 404..but я не знаю, как указать эту ошибку только уловить 404 и позволить системе запускать обработчик по умолчанию для других событий.. любые предложения
Ответы
Ответ 1
Просто поймайте urllib2.HTTPError
, обработайте его, и если это не ошибка 404, просто используйте raise
, чтобы повторно создать исключение.
См. Учебник по Python.
Итак, вы можете сделать:
import urllib2
try:
urllib2.urlopen("some url")
except urllib2.HTTPError as err:
if err.code == 404:
<whatever>
else:
raise
Ответ 2
Для Python 3.x
import urllib.request
try:
urllib.request.urlretrieve(url, fullpath)
except urllib.error.HTTPError as err:
print(err.code)
Ответ 3
Ответы Tims мне кажутся вводящими в заблуждение. Особенно, когда 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 a хорошая практика программирования?