так что я новичок ie на этом уровне кодирования. Я имею в виду, что, очевидно, я очень хорошо понимаю основы, но я дошел до того, что постепенно строю бэкэнд-код для веб-приложения с высокими требованиями к базе данных, пользователи и т. Д. c. Я учусь самостоятельно, и мой код может быть не идеальным или не соответствовать некоторым хорошо принятым соглашениям, но сам код на 100% функционален. Это действительно хорошо, для чего он предназначен. Тем не менее, я продолжаю сталкиваться с небольшой проблемой, которую я не понимаю.
По какой-то причине я должен объявить мою локальную переменную old_email как None, прежде чем я смогу использовать ее в операторе if. В противном случае, если я пытаюсь объявить переменную внутри оператора if, он продолжает выдавать мне следующее сообщение об ошибке в PyCharm:
«На локальную переменную« old_email »можно ссылаться до назначения»
Я понимаю что здесь что-то происходит с областью действия, но мне кажется немного странным, что мне пришлось бы объявить переменную как None, прежде чем я смогу ее использовать. Простое объявление в верхней части моей функции не так уж важно, но моя интуиция говорит мне, что, вероятно, есть лучший способ сделать это. Я что-то здесь упускаю?
Вот одна из функций, которая имеет эту проблему. Также имейте в виду, что эта функция иногда вызывает другие простые функции, которые проверяют достоверность данных.
def change_email(new_email, user_id):
old_email = None
get_email = db.execute("SELECT email FROM user WHERE id = ?", (user_id, ))
if get_email.fetchone() is None:
new_email_is_valid = False
message = "User ID does not exist"
# It is probably impossible for the user to cause this issue. The goal here is to
# avoid internal errors or make the app crash.
return new_email_is_valid, message
else:
for row in get_email:
old_email = row[0]
if equal_values(new_email, old_email):
new_email_is_valid = False
message = "This is already your email address"
return new_email_is_valid, message
elif not match(r"[^@]+@[^@]+\.[^@]+", new_email):
new_email_is_valid = False
message = "This is not a valid email address"
return new_email_is_valid, message
elif length_validity(new_email) is False:
new_email_is_valid = False
message = "Invalid format"
return new_email_is_valid, message
elif is_blank(new_email):
new_email_is_valid = False
message = "The field can't be left blank"
return new_email_is_valid, message
else:
new_email_is_valid = True
message = "Email address changed successfully"
db.execute("UPDATE user SET email = ? WHERE id = ?", (new_email, user_id))
conn.commit()
return new_email_is_valid, message