如何让Python正确处理OSError及仓库不存在的GitCommandError异常?
解决方案
首先要明确你需要处理的两类异常:
OSError:创建目录时可能抛出(比如目录已存在、权限不足)git.exc.GitCommandError:仓库克隆失败时抛出,其中仓库不存在的场景会返回退出码128
修正后的代码
import os from git import Repo from git import exc # 导入git模块的异常类 try: os.mkdir(res) print("cloning") repo = Repo.clone_from(item['href'], to_path=res) except (OSError, exc.GitCommandError) as e: # 可选:针对仓库不存在的场景做特殊判断 if isinstance(e, exc.GitCommandError): if e.status == 128 and "repository not found" in e.stderr: print(f"目标仓库不存在: {item['href']}") else: print(f"克隆操作失败: {e}") # 捕获到异常后继续循环 continue
关键说明
- 异常捕获写法修正:Python 2中捕获多个异常需要用括号包裹,原代码
except OSError, Exception:是错误写法,会把Exception当作异常实例的变量名,而非捕获该类型异常。 - Git异常的捕获:仓库不存在属于
git.exc.GitCommandError,必须提前导入该异常类才能捕获。 - 精准识别仓库不存在:通过异常的
status(退出码128)和stderr中的错误信息,可以精准区分仓库不存在的场景,避免误处理其他Git命令错误(比如权限不足、网络问题)。
内容的提问来源于stack exchange,提问作者nerd
相关产品推荐
相关产品推荐

