#python
#python
Вопрос:
Я пишу тестовую программу, которая в некотором роде похожа на отслеживание инвентаря для магазина проката. Я работаю над проверкой введенных пользователем данных, но я постоянно получаю NameError с одной из моих функций, которая не определена, но я ее уже определил.
def check_entries (): #This function checks whether what the user entered is correct for the entry and store
global customer_name_error_label
global receipt_numb_error_label
global item_hired_name_error_label
global numb_items_hired_error_label
global numb_items_hired_numb_rel_error_label
if customer_name_entry.get () .isalpha () and receipt_number_entry.get().isdigit() and item_hired_entry.get () .isalpha ():
if number_of_items_hired_entry.get () .isdigit () and int (number_of_items_hired_entry.get () ) >0 and int (number_of_items_hired_entry.get () ) <500:
customer_name_error_label.grid_forget ()
receipt_numb_error_label.grid_forget ()
item_hired_name_error_label.grid_forget ()
numb_items_hired_error_label.grid_forget ()
numb_items_hired_numb_rel_error_label.grid_forget ()
append_lists ()
else:
if customer_name_entry.get () .isalpha () ==False:
customer_name_error_label=Label (main_frame,text="Please enter a name that only has letters,no numbers ,and there must be a name entered ",bg='red')
customer_name_error_label.grid (row=0,column=3)
if receipt_number_entry.get () .isdigit() ==False:
receipt_numb_error_label=Label (main_frame,text="Please enter a receipt number that is only a number and doesn't have any letters or symbols.",bg='red')
receipt_numb_error_label.grid(row=1,column=3)
if item_hired_entry.get () .isalpha ()== False:
item_hired_name_error_label=Label (main_frame,text="Please enter a item name that only has letters,numbers and symbols aren't accepted.",bg='red')
item_hired_name_error_label.grid (row=2,column=3)
if number_of_items_hired_entry.get ().isdigit ()== False:
numb_items_hired_error_label=Label (main_frame,text="The number of items hired can only be a number,symbols,and letters aren't accepted.",bg='red')
numb_items_hired_error_label.grid (row=4,column=3)
if int (number_of_items_hired_entry.get () ) <0 and int (number_of_items_hired_entry.get () ) >500:
numb_items_hired_numb_rel_error_label=Label (main_frame,text="The number of items hired can only be more then 0 and less then 500",bg='red')
numb_items_hired_numb_rel_error_label.grid (row=5,column=2)
Вот ошибка:
line 19, in check_entries
customer_name_error_label.grid_forget ()
NameError: name 'customer_name_error_label' is not defined
Комментарии:
1. Почему вы не доверяете сообщению об ошибке? В нем говорится, что вы никогда не определяли
customer_name_error_label
.global
это не оператор объявления переменной.2. Очевидно, что код, пытающийся получить доступ
customer_name_error_label
, попадает перед кодом, который присваиваетcustomer_name_error_label
.3. Предположительно, строка 19 выполняется перед ее определением.
4. Мне нужно, чтобы это использовалось перед объявлением, потому что это единственный известный мне способ удалить метки ошибок после того, как пользователь введет правильные имена и цифры и операторы if до того, как будут выполнены else и предупреждения об ошибках исчезнут.