Я хочу знать, почему цикл здесь не остановится

#python #python-3.x

#python #python-3.x

Вопрос:

Я пытался написать программу, которая выполняет поиск во вложенном каталоге, а затем возвращает местоположение искомого файла.Чтобы вложить сканирование внутрь каталогов, я вызвал функцию внутри функции. Мне это удалось, поскольку программа работала, но когда я хотел, это было остановить поиск при выполнении первого нажатия. Код приведен ниже. Может кто-нибудь объяснить мне, почему итерация не останавливается.

 search = sys.argv[2]

def find(loca,term):
        count = 1
        for file in os.listdir(loca):
            if (count > 1):
                break
            try:
                os.chdir(f'{loca}{file}')
                newloca = loca   '\'   file
                find(newloca,term)
            except NotADirectoryError:
                pass
            except PermissionError:
                pass

            if(file == term):
                print(file)
                print(f"found the {term} at")
                print(os.getcwd())
               count  = 1


find("E:/",search)
  

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

1. Пожалуйста, поделитесь результатами этой программы.

2. Что вы увидели, когда вы выполнили свою программу с помощью отладчика? Было ли это чем-то неожиданным?

3. результат этой программы будет таким, как я сказал upside. Программа сканирует весь каталог E и возвращает поисковый запрос, который указан в консоли. Все, что я хочу знать, это почему итерация не останавливается. Или я делаю что-то не так

4. Нет, программа работает нормально. Только цикл не останавливается

Ответ №1:

Поскольку вы используете рекурсию, вам нужен какой-то способ сигнализации родительского элемента при обнаружении попадания. Для этого вы можете использовать return .

 def find(loca,term):
    count = 1
    for file in os.listdir(loca):
        if (count > 1):
            break
        try:
            os.chdir(f'{loca}{file}')
            newloca = loca   '\'   file
            if find(newloca,term):
                return 1
        except NotADirectoryError:
            pass
        except PermissionError:
            pass

        if(file == term):
            print(file)
            print(f"found the {term} at")
            print(os.getcwd())
            count  = 1
            return 1
  

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

1. спасибо, что ваш код работает.. еще одна вещь — это эффективный метод для этого или есть что-то еще более эффективное