#python-3.x
#python-3.x
Вопрос:
Целью следующего фрагмента кода является поиск в текстовом файле и поиск переменной ‘name’. Если ‘name’ присутствует где-либо в текстовом файле, оно должно иметь user_new
значение False
. В противном случае он не существует в текстовом файле, а user_new
должен быть True
.
Однако значение user_new в обоих случаях никогда не устанавливается ни на что и приводит к ошибке: «локальная переменная ‘user_new’, на которую ссылаются перед назначением»
with open("accuracy.txt", "r") as search:
lineno = 0
for line in search:
lineno = lineno 1
if name in line:
user_new = False
break
else:
user_new = True
break
search.close()
print(user_new)
Комментарии:
1. Где вы определили
name
? Каково его значение? Также: при использованииwith
вам не нужно закрывать файл впоследствии2. имя было определено пользователем, введенным ранее в коде. Я могу опубликовать полный код с этим, если требуется, но там много ненужного для этой проблемы.
Ответ №1:
В этом коде это может произойти только в том случае, если циклу for нечего повторять. Это означало бы, что оператор if никогда не выполняется и user_new
никогда не определяется.
Убедитесь, что accuracy.txt
есть хотя бы одна строка, иначе цикл никогда не запустится, поскольку нет строк для перебора.
Если отсутствие строк в текстовом файле неизбежно, попробуйте проверить длину файла с помощью чего-то такого, как:
if search.read() == "":
user_new = False
Ответ №2:
Проблема заключалась в том, что иногда accuracy.txt
было пусто, что приводило к тому, что цикл никогда не запускался и user_new
никогда не определялся. Спасибо @Joe Allen за ответ.