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)