Возникли проблемы с определением меток в Python 3

#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 и предупреждения об ошибках исчезнут.