NameError:未定义名称“用户操作”

Posted

技术标签:

【中文标题】NameError:未定义名称“用户操作”【英文标题】:NameError: name 'useraction' is not defined 【发布时间】:2020-09-22 14:06:06 【问题描述】:

我确保在 main() 之前有 global,并且我确实为变量 useraction 分配了一个值。为什么它仍然说它是未定义的?

    import os.path
    from os import path     

    shoppinglist = []   
    global useraction   

    def main():
        Displaylist()     
        RunItemAction()   


    def Displaylist():
        i = 0
        if (len(shoppinglist)>0):
    while (i<=len(shoppinglist)):
        print(shoppinglist[i] +"\n")
        i+=1

        useraction = str(input("Do you want to add, remove, or search for an item? "))
        useraction = useraction.upper()

    def RunItemAction():
        if( useraction == "ADD"):     
            AddItem()

【问题讨论】:

如果您在任何函数中使用名为useraction 的变量,它已经是全局变量。如果您想在任何函数中引用它,请使用 global 关键字在该函数中引用它。 您误解了global 的工作原理。 【参考方案1】:

我认为你应该这样使用它。

    import os.path
    from os import path     

    shoppinglist = []   
    useraction=""  # or any default value you want to give   

    def main():
        Displaylist()     
        RunItemAction()   


    def Displaylist():
        global useraction
        i = 0
        if (len(shoppinglist)>0):
            while (i<=len(shoppinglist)):
                print(shoppinglist[i] +"\n")
                i+=1

        useraction = str(input("Do you want to add, remove, or search for an item? "))
        useraction = useraction.upper()

    def RunItemAction():
        global useraction
        if( useraction == "ADD"):     
            AddItem()

【讨论】:

【参考方案2】:

根据定义,在全局范围内定义的任何名称都是全局的。

global 语句在 another 范围内用于将原本本地的名称标记为全局名称。

import os.path
from os import path     

shoppinglist = []   

def main():
    Displaylist()     
    RunItemAction()   


def Displaylist():
    global useraction
    i = 0
    if (len(shoppinglist)>0):
        while (i<=len(shoppinglist)):
            print(shoppinglist[i] +"\n")
            i+=1

    useraction = str(input("Do you want to add, remove, or search for an item? "))
    useraction = useraction.upper()

def RunItemAction():
    global useraction
    if( useraction == "ADD"):     
        AddItem()

也就是说,根本不要使用全局变量。将参数传递给函数,并使它们返回值。

【讨论】:

以上是关于NameError:未定义名称“用户操作”的主要内容,如果未能解决你的问题,请参考以下文章

NameError:名称“树”未定义

python:NameError:全局名称'...'未定义[重复]

NameError:名称'unicode'未定义[重复]

NameError:名称'python'未定义[关闭]

NameError:名称“”未定义[关闭]

Buildozer:NameError:未定义名称'functools'