Вопрос про try и except, python
Есть такой код:
def cback():
global txt,chg
clor = "{}".format(txt.get())
try:
if chg=="background":
lbl.configure(bg=clor)
clickb.configure(bg=clor,activebackground=clor)
shop.configure(bg=clor,activebackground=clor)
lear.configure(bg=clor,activebackground=clor)
window.configure(bg=clor)
if chg=="text":
lbl.configure(fg=clor)
clickb.configure(fg=clor)
shop.configure(fg=clor)
clear.configure(fg=clor)
window.configure(fg=clor)
except:messagebox.showerror("Не найден цвет.","Цвет не найден!")
При вводе не корректного цвета, выдается ошибка, вроде все окей, Но!
При вводе корректного цвета, выполняется функция(меняется цвет), но все равно выдается ошибка.
Где я допустил ошибку?
Ответы (1 шт):
Короткий ответ: lear вместо clear в комманде
lear.configure(bg=clor,activebackground=clor)
Долгий ответ:
Не давайте много кода до try: и не давайте там if.
Когда знаете, какую ошибку (исключение) вы хотите обработать (то узнаете, когда не используете try-except), примените ее класс в except:, для вашего кода except ValueError:, иначе может возникнуть другая, какая-нибудь ошибка, и вы все равно получите ложное сообщение
«Не найден цвет».
Но и точно такой случай ы вас настал, потому что в вашем коде встретилась команда с неправильным именем
lear.configure(bg=clor,activebackground=clor)
вместо правильной
clear.configure(bg=clor,activebackground=clor)
и приводила к ошибке NameError (потому что имя lear не существует), но вы поймали все ошибки, выводя для всех одно и то же сообщение
«Не найден цвет».
Измените ваш код — например так:
def cback():
# global txt, chg # не надо, потому что вы их не меняете
clor = txt.get() # не надо clor = "{}".format(txt.get())
controls = [clickb, shop, clear, window]
if chg == "background":
try:
lbl.configure(bg=clor)
except ValueError:
messagebox.showerror("Не найден цвет.", "Цвет не найден!")
return
for control in controls:
control.configure(bg=clor, activebackground=clor)
if chg == "text":
try:
lbl.configure(fg=clor)
except ValueError:
messagebox.showerror("Не найден цвет.", "Цвет не найден!")
return
for control in controls:
control.configure(fg=clor)