2012-10-08 6 views
0

Je sais que c'est un sujet très discuté, je sais qu'il y a des tonnes de threads à ce sujet (je les ai tous lus), mais je ne comprends toujours pas.Problème avec les variables globales et locales

Les variables non définies (locales et globales) sont mon plus gros problème en Python et je n'ai aucune idée de ce que je fais en les corrigeant. Je vais passer en revue et ajouter un x = 0 ou un var = func (var) où et parfois il fonctionne et parfois non. C'est incroyablement frustrant et j'ai vraiment besoin d'aide. J'ai demandé à mon professeur, mais cela lui prend généralement un certain temps pour me répondre et j'aimerais que cette chose soit corrigée.

Voici ce que je travaille sur: http://pastebin.com/KTuh7D2p (Ceci est pour l'école.)

Quelqu'un peut-il expliquer s'il vous plaît chose variable moi?

Je continue de recevoir des erreurs comme ceci:

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 

Répondre

2

Dans ce cas particulier, je pense qu'il est parce que vous essayez d'utiliser itemSave pour se définir. Cela équivaut à dire quelque chose comme:

x = 5 + x 

la première fois que vous définissez x. Vous devez indiquer le contexte de itemSave pour pouvoir utiliser sa valeur.

Par exemple, ce programme:

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

me donner un message d'erreur de:

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

Cependant, cela fonctionnerait très bien, et l'impression "15":

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

Oh! D'accord. Je me souviens de l'avoir fait dans une mission antérieure maintenant. (: Mais comment pouvez-vous obtenir X pour imprimer dans un module différent plus tard sur la ligne? Utilisez juste 'return x'? Ou puis-je faire' addX (x) 'puis le passer comme' printInfo (x) '? – Chelsea

2

Voici donc le code que vous demandez à propos de

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  

Cette ligne est à l'origine de l'erreur

itemsSave = tagYell(items, itemsSale, itemsSave) 

Vous essayez de passer itemsSave dans la fonction tagYell() mais il n'a pas encore une valeur.

Python sait que parce que vous affectez à itemsSave dans cette même portée ie. itemsSave = ... Il doit s'agir d'une variable locale non liée, de sorte qu'il ne regarde même pas les variables globales pour voir si elles ont été définies à cet endroit.

+0

signifie que je ne devrais pas avoir 'itemsSave = tagYell (articles, itemsSale, itemsSave' aura-t-il se définir dans le' itemsSale = itemsSale + itemsYell' – Chelsea

+0

@Chelsea: Qu'est-ce que 'itemsSale = itemsSale + itemsYell'? – martineau

Questions connexes