Python Glossary English

все Python 3urllib.requestпонятие

urllib.request.HTTPErrorProcessor

ошибки и перенаправления

Пост-обработчик HTTP-ответов: всё вне диапазона 2xx отправляет в цепочку обработки ошибок.

Синтаксис

urllib.request.HTTPErrorProcessor()

Именно он решает, что 3xx, 401 или 500 — не ответ, а событие: дальше их обрабатывают перенаправления, авторизация и в итоге HTTPDefaultErrorHandler с HTTPError. Он стоит в цепочке последним (handler_order 1000). Для file: и data: не вызывается вовсе — кодов HTTP там нет, и resp.status равен None.

Примеры

import urllib.request
print(urllib.request.HTTPErrorProcessor.handler_order)  # → 1000
with urllib.request.urlopen('data:,x') as resp:
    print(resp.status)  # → None
import email.message, io, urllib.error, urllib.request, urllib.response
def reply(req, code, body=b'', **headers):
    msg = email.message.Message()
    for name, value in headers.items():
        msg[name.replace('_', '-')] = value
    resp = urllib.response.addinfourl(io.BytesIO(body), msg, req.full_url, code)
    resp.msg = 'demo'
    return resp
class Server(urllib.request.BaseHandler):
    handler_order = 100
    def http_open(self, req):
        return reply(req, 503, b'busy')
try:
    urllib.request.build_opener(Server).open('http://example.com/')
except urllib.error.HTTPError as e:
    print('HTTPError', e.code)  # → HTTPError 503

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности