全局变量:名称未定义

Global variable: name not defined

所以我试图构建一个计算器:

def button_add():
    first_num = e.get()
    global f_num
    global math
    math = "add"
    f_num = int(first_num)
    e.delete(0, END)

def button_min():
    first_num = e.get()
    global f_num
    global math
    math = "min"
    f_num = int(first_num)
    e.delete(0, END)

def button_equal():
    second_num = e.get()
    e.delete(0, END)
    global math

    if math == "add":
        e.insert(0, f_num + int(second_num))
    elif math == "min":
        e.insert(0, f_num - int(second_num))


# Button command
equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal())
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add())
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min())

但是在 运行 之后我遇到了一个错误:

   File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 89, in <module>
   equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m",command=button_equal())
   File "C:\Users\VAIO\PycharmProjects\project\calculator.py", line 52, in button_equal
    if math == "add":
   NameError: name 'math' is not defined

我是初学者,我遵循了这个 guide,并且我已经仔细检查了代码,使其与视频中的代码相匹配。为什么 global 不工作?这与我使用的 Python 版本有什么关系吗?

Ps。我只包括我的一些代码,因为其余代码与我的问题无关。

当你使用command=button_equal()时,button_equal()会立即执行。那时math(最好不要使用标准模块名作为变量名)没有定义。

您应该将函数引用(不带 () 的函数名称)分配给 command 选项:

equal = Button(m, text="=", font=("Mickey", 20), padx="2m", pady="2m", command=button_equal)
add = Button(m, text="+", font=("Mickey", 20), padx="2m", pady="2m", command=button_add)
min = Button(m, text="-", font=("Mickey", 20), padx="2m", pady="2m", command=button_min)

请注意,如果您在单击 +- 之前单击 =,则会出现相同的异常被提高。所以最好先初始化 math:

math = None

equal = Button(...)