#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. Ах, спасибо — это действительно была моя проблема.