Я написал сценарий для автоматической загрузки файлов из списка URL-адресов, используя urllib.request.
for url in addresses:
file_name = url.rsplit('/', 1)[-1]
file = os.path.join(directory, file_name)
urllib.request.urlretrieve(url, file)
print(" %-15s %-10s %25s" % ('--', file_name, 'downloaded'))
и иногда я получаю raise RemoteDisconnected("Remote end closed connection without" http.client.RemoteDisconnected: Remote end closed connection without response
и сценарий останавливается. В списке есть 100 URL-адресов, и я могу получить эту ошибку при загрузке 3-го, 25-го или 89-й файл. Я имею в виду, что я могу получить эту ошибку для n-го файла, но когда я снова запустил свой скрипт, n-й файл можно было загрузить правильно.
Как это исправить?
Если вы хотите, чтобы выполнение выполнялось после сбоя, используйте try
, except
-
for url in addresses:
file_name = url.rsplit('/', 1)[-1]
file = os.path.join(directory, file_name)
try:
urllib.request.urlretrieve(url, file)
print(" %-15s %-10s %25s" % ('--', file_name, 'downloaded'))
print(count, '/', len(addresses))
except RemoteDisconnected:
print("url {} did not return a valid response".format(url))
Теперь, чтобы решить эту проблему дальше, вы можете продолжать пытаться, пока URL-адрес не отреагирует так,
valid_response = False
while not valid_response:
try:
urllib.request.urlretrieve(url, file)
valid_response = True
except RemoteDisconnected:
pass
Это своего рода грубая сила, но будет пытаться до тех пор, пока вы не получите действительный ответ