0

我知道这是一个被广泛讨论的话题,我知道那里有很多关于它的话题(我都读过),但我仍然不明白。

未定义的变量(本地和全局)是我在 Python 中最大的问题,我不知道在尝试修复它们时我在做什么。我将通过并添加一个 x = 0 或一个 var = func(var) 在某些地方和某些时候它可以工作,有时它不会。这令人难以置信的沮丧,我真的需要一些帮助。我问过我的老师,但她通常需要一段时间才能回复我,我想解决这个问题。

这是我正在做的事情:http: //pastebin.com/KTuh7D2p(这是给学校的。)

有人可以向我解释变量的事情吗?

我不断收到这样的错误:

Traceback (most recent call last):
  File "Project1-v2.py", line 144, in <module>
    main()
  File "Project1-v2.py", line 12, in main
    itemsSave = tagYell(items, itemsSale, itemsSave)
UnboundLocalError: local variable 'itemsSave' referenced before assignment
4

2 回答 2

2

在这种特殊情况下,我猜这是因为你试图用它itemSave来定义自己。这相当于说这样的话:

x = 5 + x

您第一次定义x.

itemSave在您尝试使用它的价值之前,您需要提供一些关于什么是的上下文。

例如,这个程序:

myNum = 5
x = float(myNum+x)
print x

会给我一个错误信息:

x = float(myNum+x)
NameError: name 'x' is not defined

但是,这可以正常工作,并打印“15”:

myNum = 5
x = 10
x = float(myNum+x)
print x
于 2012-10-08T02:08:58.370 回答
2

所以这是你要问的一段代码

def main():
    print "Welcome to the shop!"
    menu()
    itemsSale = 0
    items = getItems()
    itemsSave = tagYell(items, itemsSale, itemsSave)
    itemsSale = calcTax(itemsSale)
    taxTags(items)
    printInfo(items, itemsSale, itemsSave)
    enterItem = input("To enter another item number, press 1. To end, press 0: ")
    print #Line break      

此行导致错误

itemsSave = tagYell(items, itemsSale, itemsSave)

您正在尝试传递itemsSave给该tagYell()函数,但它还没有值。

Python 知道这一点,因为您itemsSave在同一范围内分配,即。itemsSave = ...它必须是一个未绑定的局部变量,因此它甚至不会查看全局变量来查看它是否在那里定义。

于 2012-10-08T02:12:37.740 回答