如何用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
相关产品推荐
相关产品推荐

