UnboundLocalError: локальная переменная 'tickets_per_person', на которую ссылаются до назначения, но 'tickets_per_person', назначенная в качестве глобальной переменной

Я продолжаю получать эту ошибку:

UnboundLocalError: локальная переменная tickets_per_person, на которую ссылается перед назначением.

Однако я назначил переменную tickets_per_person как глобальная переменная в верхней части моего кода, поэтому я не понимаю, почему он не распознается.

Полная функция:

def date_price_increase() :
    if 'July' or 'August' or 'September' in full_date :
        tickets_per_person = tickets_per_person * 1.15
    elif 'February' or 'October' or 'November'in full_date :
        tickets_per_person = tickets_per_person * 0.95
    else :
        tickets_per_person = tickets_per_person    

Назначение глобальной переменной:

global tickets_per_person
tickets_per_person = 0

Следом является:

Exception in Tkinter callback
Traceback (most recent call last):
  File 
"C:\Users\samue\AppData\Local\Programs\Thonny\lib\tkinter\__init__.py", 
line 1705, in __call__
    return self.func(*args)
  File "C:\Users\samue\OneDrive - The Becket 
School\Airport_Tkinters_GUI_29.12.18.py", line 485, in cost
    date_price_increase()
  File "C:\Users\samue\OneDrive - The Becket 
School\Airport_Tkinters_GUI_29.12.18.py", line 325, in date_price_increase
   tickets_per_person = tickets_per_person * 1.15
UnboundLocalError: local variable 'tickets_per_person' referenced before 
   assignment

1 ответ

Вы должны использовать global tickets_per_person внутри def date_price_increase(): сообщить функции, что вы хотите использовать глобальную переменную tickets_per_person вместо местного.

def date_price_increase() :

    global tickets_per_person

    if 'July' or 'August' or 'September' in full_date :
        tickets_per_person = tickets_per_person * 1.15
    elif 'February' or 'October' or 'November'in full_date :
        tickets_per_person = tickets_per_person * 0.95
    else :
        tickets_per_person = tickets_per_person   

Там нет необходимости использовать слово global внешние функции, потому что все переменные, созданные вне функций, являются глобальными.


РЕДАКТИРОВАТЬ: вы должны создать нормальную функцию с параметрами и return, Это предпочтительный метод.

def date_price_increase(tickets_per_person, full_date):

    if 'July' or 'August' or 'September' in full_date:
        tickets_per_person = tickets_per_person * 1.15
    elif 'February' or 'October' or 'November'in full_date:
        tickets_per_person = tickets_per_person * 0.95
    else:
        tickets_per_person = tickets_per_person   

    return tickets_per_person

и беги

tickets_per_person = date_price_increase(tickets_per_person, full_date)
Другие вопросы по тегам