Пользовательский файл не работает при изменении каталога

#python #interpreter

Вопрос:

Итак, у меня есть этот интерпретатор, который я сделал от скуки, но он не работает, когда я меняю его каталог. Когда он у меня в той же папке, main.py что и файл, он работает нормально, но когда я помещаю его в test папку, я получаю сообщение об ошибке. UnboundLocalError: local variable 'individual' referenced before assignment Это то, что обрабатывает аргумент для пути к файлу:

 if __name__ == "__main__":
    argv = sys.argv
    #try:
    if argv[1] != None:
        if argv[1].split("/"):
            target = argv[1].split("/")[len(argv[1].split("/"))-1]
            __main__(target)
        else:
            target = argv[1]
            __main__(target)
    else:
        print("No file specified")
    #except Exception as e:
        #print(e)
 

Это основная функция, которая считывает файл, а затем интерпретирует его:

 def __main__(target):
    for file in os.listdir("."):
        if file.endswith(EXTEN):
            with open(os.path.join(os.getcwd(), file)) as f:
                lines = f.readlines()
                for each in lines:
                    individual = each.split()
                
    process_command(individual)
 

Я уже пытался понять, что это значит, и это отчасти помогло мне, поэтому я решил, что это моя последняя надежда.

Ответ №1:

Ошибка означает, что вы ссылаетесь на individual нее перед назначением. Поскольку назначение to individual скрыто под несколькими операторами потока управления, вы можете перейти к process_command(individual) нему, не входя в цикл или не читая файл.

Добавьте individual = [] (или None или какое-либо другое значение по умолчанию) в верхней части вашей функции, чтобы убедиться, что переменная существует независимо от значения цели или содержимого файла.

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

1. Я сделал это, но я все еще получаю ту же ошибку.

2. Можете ли вы обновить свой вопрос, чтобы показать новое состояние __main__ ?

Ответ №2:

Это соответствующий блок:

 with open(os.path.join(os.getcwd(), file)) as f:
                lines = f.readlines()
                for each in lines:
                    individual = each.split()
 

Этот блок кода никогда не достигается, потому file.endswith(EXTEN) что он никогда не является истинным, или сам `os.listdir(«.») пуст. Кроме того, любой файл, который достигает этого блока, но пуст, также ничего не назначит отдельному пользователю. Я рекомендую использовать отладчик или некоторые инструкции печати, чтобы увидеть, какие файлы вы просматриваете в своей основной функции.

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

1. Это должно быть правдой, потому EXTEN что это то же самое, что и расширение, которое у меня есть, как в test папке.

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

3. В main.py файл и папка тестирования находятся на одном уровне в корневой папке, а файл test.plux (пользовательское расширение) находится в папке тестирования.