【问题标题】:NameError: name 'useraction' is not definedNameError:未定义名称“用户操作”
【发布时间】: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 的工作原理。

标签: python global-variables undefined


【解决方案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()
    

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

    【讨论】:

      猜你喜欢
      • 2013-11-02
      • 1970-01-01
      • 2018-11-19
      • 1970-01-01
      • 2018-01-24
      • 1970-01-01
      • 1970-01-01
      • 2021-04-15
      相关资源
      最近更新 更多