#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 (пользовательское расширение) находится в папке тестирования.