Как вы можете перебирать каталоги python и один раз останавливаться в корневом каталоге

#python #working-directory

Вопрос:

В Python я использую while цикл, чтобы проверить, является ли CWD репозиторием git. Если это не так, CWD изменяется ( .. ) и тестируется снова.

Если репозиторий git найден, то функция работает должным образом. Однако, если репозиторий git не найден, while цикл продолжается, потому os.chdir('..') что не генерирует ошибку, даже если CWD находится на / .

 def get_git_repo():  path = os.getcwd()  original_path = 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:  is_git_repo = False  path = os.chdir('..')  os.chdir(original_path)  return repo  

Чтобы попытаться исправить это, я добавил тест , чтобы проверить, работает ли CWD / , но это не работает, и while цикл все еще продолжается вечно.

Как я могу выйти из функции , если CWD является / , а не репозиторием git?

 def get_git_repo():  ...  except git.exc.InvalidGitRepositoryError:  is_git_repo = False  if not path == '/':  path = os.chdir('..')  else:  raise Exception("Unable to discover path to git repository.")  ...  

Ответ №1:

проблема вашего кода в том , что os.chdir('..') он возвращает None , а не текущий путь.

Вам нужно получить текущий каталог после изменения:

 os.chdir('..') path = os.getcwd()  

Комментарии:

1. Ах, спасибо — это действительно была моя проблема.