You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python循环调用gdown下载谷歌云盘文件时程序提前结束的问题

问题分析与修复方案

核心问题及解决步骤

1. 重复使用相同文件名导致下载被跳过

循环里每次都用同一个fullfilename,gdown会默认检查目标文件是否存在,若已存在则直接跳过下载,这会让循环快速走完但实际没执行几次有效下载。

修复:为每个链接生成唯一文件名,比如基于链接ID或循环索引:

# 示例:用索引+文件ID生成唯一文件名
for idx, link in enumerate(links):
    file_id = link.split("id=")[-1]
    fullfilename = f"downloaded_file_{idx}_{file_id}"  # 可根据文件类型加后缀,如.pdf/.zip

2. 谷歌云盘链接格式不兼容

gdown对https://drive.google.com/open?id=...格式的链接解析支持不稳定,更推荐直接提取文件ID传入参数,或者转换为uc格式的链接。

修复:

  • 直接提取ID传入id参数(最可靠):
gdown.download(id=file_id, output=fullfilename, quiet=False)
  • 或者转换链接格式:
uc_link = link.replace("open?id=", "uc?id=")
gdown.download(uc_link, fullfilename, quiet=False)

3. 异常处理语句错误

原代码中print("..." + e)会触发TypeError,因为无法直接拼接字符串与异常对象,导致异常捕获后又抛出新错误,可能让程序静默终止,你看不到错误信息。

修复:用str(e)将异常对象转为字符串:

print(f"下载链接时出错: {str(e)}")

完整修正代码

import gdown

links = ["https://drive.google.com/open?id=...", "https://drive.google.com/open?id=..."]

for idx, link in enumerate(links):
    try:
        # 提取文件ID
        file_id = link.split("id=")[-1]
        # 生成唯一文件名
        fullfilename = f"file_{idx}_{file_id}"
        # 下载文件
        gdown.download(id=file_id, output=fullfilename, quiet=False)
    except (ValueError, IOError, RuntimeError) as e:
        print(f"下载链接 {link} 时出错: {str(e)}")

额外建议

  • 执行pip install --upgrade gdown更新到最新版本,旧版本可能存在链接解析bug。
  • 确保谷歌云盘文件是公开可下载的,私有文件需要额外的授权配置。

内容的提问来源于stack exchange,提问作者Nat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 04:46:10