【问题标题】:Running an if statement against a variable set as None.针对设置为 None 的变量运行 if 语句。
【发布时间】:2018-08-06 03:43:07
【问题描述】:

这可能太新了,无法准确找到我正在寻找的东西。我有一个全局预设为 None 的变量,以从 func1 更新 var1 的值。如果第一个函数没有运行以从 None 更新 Var1,是否有一种方法可以对 None 变量执行 if 语句,如果确认它仍然设置为 None,则执行一些操作。我试过 ==、!= "1" 和许多其他熟悉的人,但没有找到解决办法。这是 tkinter 的示例:

import tkinter as tkinter
from tkinter import Frame
import tkinter.filedialog as filedialog

root = tkinter.Tk()

class Stupid_app(Frame):
    def __init__(self, master=None):
        Frame.__init__(self, master, bd=2)

        Var1 = None

        def func1():
            global Var1
            Var1 = tkinter.filedialog.askopenfilename()  # Open file to get path
            label.config(text=Var1)   # Updates the label
            print(Var1)
            return Var1

        def func2():
            global Var1
            if Var1 is not None:
                print("var is not none")
            else:
                quit()


        Button1 = tkinter.Button(root, text="Get Path", command=func1)
        Button1.pack()

        label = tkinter.Label(root, text="^^Select File ^^")
        label.pack()

        Button2 = tkinter.Button(root, text="Run a Fuction", command=func2)
        Button2.pack()

app = Stupid_app(root)
root.update()
root.mainloop()

而是设置全局变量,将变量预设为字符串,似乎总是返回 NameError: name 'var1' is not defined 在第 22 行包含 if 语句 if var1 is "" :。我还尝试使用"a" 或类似方法设置函数内部和外部的变量。 我已经在几个位置阅读过这是不可能的,也不可能以这种方式使用 None,但我没有看到任何替代方案。任何帮助表示赞赏,谢谢。

【问题讨论】:

    标签: python python-3.x variables tkinter nonetype


    【解决方案1】:

    未定义变量和设置为None 的已定义变量之间存在很大差异。未定义的变量没有值,因为它还不存在。

    示例代码中的Var1__init__ 的本地变量,而不是全局变量。您可以在 __init__ 中添加另一个全局语句以使其成为全局。

    您可以改为将Var1 = None 移动到脚本的顶层(在类定义之外)以定义全局Var1。然后它将是None,直到它被设置为其他东西。

    由于您的函数嵌套在__init__ 中,因此您根本不必使用全局变量。您可以使用 nonlocal 而不是 global 来引用包含函数的本地函数。这仅在func1 中是必需的,因为它分配给Var1。 (您可以在不声明它们的情况下读取非局部变量和全局变量。)

    【讨论】:

    • Var1 = None 位于第 11 行。我在发布前的最后一次编辑时打错了字,原来的区分大小写是准确的。在两个函数中设置全局(如前所述,产生相同的结果。函数 2 仅在函数 1 已运行的情况下才能正常工作,但如果我要捕获的事件是函数 2 在函数 1 之前启动,其中 Var1 仍然是设置为无。if 语句是否可以运行检查Var1 是否仍设置为None。运行此is not None!= "a"1== None 的多个迭代,以及其他一些总是返回@987654339 @
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-05-01
    • 1970-01-01
    • 2017-03-10
    • 2016-08-17
    • 2018-12-15
    • 1970-01-01
    相关资源
    最近更新 更多