Почему возникает исключение http.client.IncompleteRead? - PullRequest
1 голос
/ 04 апреля 2019

У меня есть следующая последовательность кода Python 3, которая загружает zip-архив с веб-сервера и извлекает содержимое, но все обернуто тайм-аутом.

timeout_period = 60000
extraction_dir = /tmp/archive_contents
response = urllib.request.urlopen("http://webserver.com/archive.zip")
timer = threading.Timer(timeout_period, response.close)

timer.start()

try:
    with zipfile.ZipFile(io.BytesIO(response.read())) as zip_archive:
        zip_archive.extractall(extraction_dir)
except AttributeError:
    # Thrown by the object read() method when the fp is closed by the Timer thread
    pass

timer.cancel()

Иногда мне предоставляют http.clientИсключение .IncompleteRead.

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

Почему это происходит и как я могу это решить?

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

...