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

如何让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

关键说明

  1. 异常捕获写法修正:Python 2中捕获多个异常需要用括号包裹,原代码except OSError, Exception:是错误写法,会把Exception当作异常实例的变量名,而非捕获该类型异常。
  2. Git异常的捕获:仓库不存在属于git.exc.GitCommandError,必须提前导入该异常类才能捕获。
  3. 精准识别仓库不存在:通过异常的status(退出码128)和stderr中的错误信息,可以精准区分仓库不存在的场景,避免误处理其他Git命令错误(比如权限不足、网络问题)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 02:32:28