繁体   English   中英

UnboundLocalError:分配前引用了局部变量“tickets_per_person”,但将“tickets_per_person”分配为全局变量

[英]UnboundLocalError: local variable 'tickets_per_person' referenced before assignment but 'tickets_per_person' assigned as a global variable

我不断收到此错误:

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

您必须在def date_price_increase():使用global tickets_per_person来通知函数您要使用全局变量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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM