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

如何用Python统计GitHub仓库两版本变更文件数?API调用遇404求助

解决GitHub API对比版本404问题及优化代码

一、404错误的核心原因

  • 版本标识符不匹配:你测试的Dubbo仓库标签是dubbo-前缀格式(比如dubbo-3.1.10),但代码里传入的是v25.0.5这类无前缀的版本名,GitHub找不到对应标签就会返回404。必须确保v1和v2是仓库中真实存在的完整标签名、分支名或提交哈希。
  • 其他排除项:你提供的Dubbo对比URL能正常访问,说明两个版本属于可关联的提交链;公开仓库无需额外权限,也排除了权限导致的404。

二、修正后的可用代码

同时修复了原代码中diff_files_url取长度的错误(它是字符串URL,不是文件列表):

def compare_versions(self, v1, v2, g, repo_name):
    try:
        repo = g.get_repo(repo_name)
        # 传入正确的版本标识符,比如Dubbo的dubbo-3.1.10、dubbo-3.0.15
        comparison = repo.compare(v1, v2)
        
        print(f"总提交数: {comparison.total_commits}")
        # comparison.files是变更文件的列表,长度即为变更文件数量
        changed_files_count = len(comparison.files)
        print(f"变更文件数: {changed_files_count}")

        # 可选:遍历查看每个文件的变更详情
        # for file in comparison.files:
        #     print(f"文件: {file.filename}, 变更类型: {file.status}")

    except Exception as be:
        print(f"对比{v1}和{v2}时出错: {be}")

三、关键注意事项

  • 先确认版本存在性:调用前可以用repo.get_tags()获取仓库所有标签,核对传入的版本名是否完全匹配,避免因拼写、前缀错误导致404。
  • 优先用API替代HTML解析:HTML结构随时可能变更,API是GitHub官方提供的稳定接口,解决标识符问题后完全可以替代解析HTML的低效方案。
  • 异常捕获优化:可以捕获github.GithubException具体异常类型,更精准排查问题(比如区分404、限流等不同错误)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 07:52:48