Python 文件下载函数优化 - 使用 while 循环重试下载
def click_download_file(self, urn, path):
'点击下载按钮,下载文件'
downloaded_files_success = list() # 下载成功的文件列表
downloaded_files_failed = list() # 下载失败的文件列表
links = self.browser.safe_get_link(By.CSS_SELECTOR, ATTACHMENT_VIEW_WINDOW_ELEMENT)
for link in links:
# 获取文件名 文件大小
file_title, download_time_limit, file_size = self.file_title_data(link, urn)
self.browser.click_with_link(link)
self.download_alert() # 文件下载过大
logger.info(
'\n >> 【urn = {}】文件名{}文件大小{},下载时间{}'.format(urn, file_title, file_size, download_time_limit))
time.sleep(download_time_limit) # 文件下载时间
# 文件下载
status = self.download_file_is_successfully(path, file_title, file_size)
if status:
downloaded_files_success.append(file_title) # 下载成功
else:
retry_count = 3
while retry_count > 0: # 下载失败 重试下载
self.browser.click_with_link(link)
self.download_alert() # 重试需要点击文件下载过大
time.sleep(download_time_limit)
status = self.download_file_is_successfully(path, file_title, file_size)
if status:
downloaded_files_success.append(file_title) # 重试成功
logger.info('\n >> 【urn = {}】文件{}重试下载成功'.format(urn, file_title))
break
else:
logger.info('\n >> 【urn = {}】文件{}重试下载失败'.format(urn, file_title))
downloaded_files_failed.append(file_title) # 下载失败
retry_count -= 1
return downloaded_files_success, downloaded_files_failed
在优化后的代码中,我们使用 while 循环处理下载失败的重试逻辑,而不是使用重复的 for 循环。这使得代码更加简洁,更容易理解。
优化后的代码优点:
- 减少了冗余代码,提高了代码的可读性。
- 使用
while循环可以更灵活地控制重试次数。 - 代码逻辑更清晰,更容易维护。
代码说明:
retry_count变量用来记录重试次数。while循环会持续执行,直到retry_count为 0 或文件下载成功。- 每次重试前,都会执行
click_with_link()、download_alert()和time.sleep()操作。 - 如果文件下载成功,则使用
break语句退出循环。 - 如果文件下载失败,则
retry_count减 1,并继续循环。
通过使用 while 循环,我们可以有效地处理下载失败的重试逻辑,并提高代码的效率和可读性。
原文地址: https://www.cveoy.top/t/topic/qhlP 著作权归作者所有。请勿转载和采集!