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

Я получаю эту ошибку:

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 Ответ

2 голосов
/ 01 мая 2019

Вы должны использовать 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)
...