11
votes

Erreur locale non liée avec une variable globale

J'essaie de comprendre pourquoi je reçois un FrontleLocalError dans mon application pygame, les guerres de table. Voici un résumé de ce qui se passe:

Les variables, redgold code>, redgommand code>, bluegold code> et bluecommand code>, sont initialisés comme variables globales: p> xxx pré>

Ceci fonctionne lors de la frayer des unités de la boucle principale, soustrayez des fonds pour engager des unités. P>

en ce moment, j'essaie maintenant, j'essaie Pour mettre en place un système de sorte que lorsqu'une unité meurt, le tueur rembourse la commande de la victime CODE> et gagne or code> en fonction de ce qu'il a tué: p> xxx

Cela fonctionne jusqu'à ce que l'unité meurt. Ensuite, cela se produit: p>

Traceback (most recent call last):
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 606, in <module>
main()
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 123, in main
RedTeam.update()
File "C:\Python27\lib\site-packages\pygame\sprite.py", line 399, in update
for s in self.sprites(): s.update(*args)
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 304, in update
self.attack()
File "C:\Users\Oventoaster\Desktop\Games\Table Wars\Table Wars.py", line 320, in attack
REDGOLD += self.target.reward
UnboundLocalError: local variable 'REDGOLD' referenced before assignment


0 commentaires

3 Réponses :


12
votes

global rend la variable globale visible dans le bloc de code actuel. Vous ne mettez que l'instruction global dans principale , pas dans attaque .

addenda < p> Voici une illustration de la nécessité d'utiliser globalement plus d'une fois. Essayez ceci: xxx

Vous obtiendrez l'erreur Unboundlocalerror: une variable locale "rouge" référencée avant l'attribution .

MAINTENU La déclaration globale en F et il fonctionnera.

La déclaration global est active dans une portée lexicale et non une portée dynamique.


1 commentaires

C'est exactement ce que j'ai fait. Les variables globales sont appelées dans la boucle principale, juste après la fonction principale () définit l'écran et initialise l'horloge.



4
votes

Vous devez déclarer la variable comme globale dans chaque portée où ils sont modifiés

Mieux vaut mais trouver un moyen de ne pas utiliser les globaux. A du sens pour ceux d'être des attributs de classe par exemple?


0 commentaires

3
votes

a trouvé que les variables dans principale forte> code> agissent comme des variables "en lecture seule" globales dans la fonction. Si nous essayons de réaffecter la valeur, elle générera une erreur.

Essayez: p> xxx pré>

C'est ok. P>

mais: p> xxx pré>

générer p> xxx pré>

et: p> xxx pré>

génère p>

  File "./test.py", line 6, in f
    print A[RED]
UnboundLocalError: local variable **'RED'** referenced before assignment


0 commentaires