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

Python向上遍历目录查找Git仓库,到达根目录未找到如何终止循环

问题根源
  • os.chdir() 是无返回值的函数,执行后直接修改当前进程的工作目录,你将它的返回值赋值给path,会导致path变量变成None,后续path == '/'的判断永远为假,所以你加的根目录判断逻辑完全不会触发,导致循环无限执行。
  • 额外优化提示:实际不需要真实切换进程工作目录,只需要操作路径字符串判断即可,避免切换目录带来的不必要副作用。
修复方案

方案1:基于原有逻辑最小改动

仅纠正path变量的赋值逻辑即可:

import os
import git

def get_git_repo():
    original_path = os.getcwd()
    path = original_path
    is_git_repo = False
    while not is_git_repo:
        try:
            repo = git.Repo(path).git_dir
            is_git_repo = True
        except git.exc.InvalidGitRepositoryError:
            # 先判断当前路径是不是根目录
            if path == '/':
                os.chdir(original_path)
                raise Exception("Unable to discover path to git repository.")
            # 切换到上级目录,再获取当前目录赋值给path
            os.chdir('..')
            path = os.getcwd()
    os.chdir(original_path)
    return repo

方案2:更稳妥的无目录切换实现(推荐)

全程只操作路径字符串,不会修改进程的实际工作目录,无副作用:

import os
import git
from pathlib import Path

def get_git_repo():
    current_path = Path(os.getcwd()).resolve()
    # 遍历当前目录+所有上级目录,直到根目录
    for path in [current_path, *current_path.parents]:
        try:
            return git.Repo(path).git_dir
        except git.exc.InvalidGitRepositoryError:
            continue
    # 遍历完所有目录都未找到Git仓库,抛出异常
    raise Exception("Unable to discover path to git repository.")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 23:36:03