Python 文件下载完成时中断for循环

Python 文件下载完成时中断for循环,python,Python,在这里,我试图从URL列表(最大的图片)下载一个图片。我只想下载一张图片。由于图像已成功下载,我希望for循环立即停止。我很难在下面的代码中找到break语句的位置 for image_url in largest_images: # SOME VARIABLES timeout = 20 response = None file_name = md5(image_url) file_path = os.pa

在这里,我试图从URL列表(最大的图片)下载一个图片。我只想下载一张图片。由于图像已成功下载,我希望for循环立即停止。我很难在下面的代码中找到break语句的位置

    for image_url in largest_images:
        # SOME VARIABLES
        timeout = 20
        response = None
        file_name = md5(image_url)
        file_path = os.path.join(dst_dir, file_name)
        try_times = 0    

        while True:
            try:
                try_times += 1
                response = requests.get(image_url, headers=headers, timeout=timeout)
                if response.status_code == 200:
                    print "Downloading: %s" % image_url
                    with open(file_path, 'wb') as f:
                        for chunk in response.iter_content(1024):
                            f.write(chunk)
                    response.close()
                    file_type = imghdr.what(file_path)
                    # if file_type is not None:
                    if file_type in ["jpg", "jpeg", "png", "bmp"]:
                        new_file_name = "{}.{}".format(file_name,file_type)
                        new_file_path = os.path.join(dst_dir, new_file_name)
                        shutil.move(file_path, new_file_path)
                        print ("## OK: {} {}".format(new_file_name, image_url))
                        break (I have added a break statement here, but its not working)
                    else:
                        os.remove(file_path)
                        print ("## Err: {}".format(image_url))
                    break
            except Exception as e:
                if try_times < 3:
                    continue
                if response:
                    response.close()
                print ("## Fail: {} {}".format(image_url, e.args))
                break    
对于最大\u图像中的图像\u url:
#一些变量
超时=20
响应=无
文件名=md5(图像url)
file_path=os.path.join(dst_目录,文件名)
尝试次数=0
尽管如此:
尝试:
尝试次数+=1
response=requests.get(image\u url,headers=headers,timeout=timeout)
如果response.status_code==200:
打印“下载:%s”%image\u url
打开(文件路径“wb”)作为f:
对于响应中的块。iter_内容(1024):
f、 写入(块)
答复:close()
文件类型=imghdr.what(文件路径)
#如果文件类型不是“无”:
如果文件\输入[“jpg”、“jpeg”、“png”、“bmp”]:
新建文件名=“{}.{}”。格式(文件名,文件类型)
new_file_path=os.path.join(dst_dir,new_file_name)
移动(文件路径、新文件路径)
打印(“##确定:{}{}”。格式(新文件名、图像url))
break(我在这里添加了break语句,但它不起作用)
其他:
删除(文件路径)
打印(“##错误:{}”。格式(图像url))
打破
例外情况除外,如e:
如果重试次数小于3次:
持续
如果回答:
答复:close()
打印(“##失败:{}{}”。格式(图像url,e.args))
打破

看起来每个图像url最多尝试3次。我建议在进入while循环之前,确保文件路径不存在,在完成while循环之后,检查文件路径中是否存在文件。如果存在文件,则从for循环中断。

只需取出except中的文件并将其保留在try中即可