SyntaxWarning : name is assigned to before global declaration
3 réponses
Monsieur Dusnob
Bonjour
je débute en python alors désolé si ma question est un peu stupide.
J'ai écrit un programme (en fait une interface graphique pour un
ensemble de classes situé dans un autre module) qui doit gérer
(lire/transformer/écrire) une (et une seule) instance d'une classe
"service".
Comme corps du programme, j'ai :
if __name__=="__main__":
serviceencours=None
creeinterface()
tk.mainloop()
ici, serviceencours est modifié à l'intérieur de (une fonction appelée
par) creeinterface() (je passe les détails non relevants, et le
word-wrapping est "accidentel") :
def creeinterface():
rafraichirapercu()
def rafraichirapercu():
global serviceencours
try:
serviceencours=idef.service(sourceentry.get())
except:
serviceencours=None
if sourceentry.get()!="":
tkMessageBox.showerror("Erreur",'Impossible d\'interpréter
le fichier "%s".\nEst-il au bon format ?' % sourceentry.get(),parent=root)
À l'exécution, tout marche bien, excepté que j'ai ce message sur sdterr :
SyntaxWarning: name 'serviceencours' is assigned to before global
declaration
def rafraichirapercu():
J'ai un peu de mal à comprendre ce qui chiffone Python (ce comportement
est voulu) et surtout que faire pour y remédier. Est-ce que j'ai fait
quelque chose de mal ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Fouff
Bonjour
je débute en python alors désolé si ma question est un peu stupide.
J'ai écrit un programme (en fait une interface graphique pour un ensemble de classes situé dans un autre module) qui doit gérer (lire/transformer/écrire) une (et une seule) instance d'une classe "service".
Comme corps du programme, j'ai :
if __name__=="__main__": serviceencours=None creeinterface() tk.mainloop()
ici, serviceencours est modifié à l'intérieur de (une fonction appelée par) creeinterface() (je passe les détails non relevants, et le word-wrapping est "accidentel") :
def creeinterface(): rafraichirapercu()
def rafraichirapercu(): global serviceencours try: serviceencours=idef.service(sourceentry.get()) except: serviceencours=None if sourceentry.get()!="": tkMessageBox.showerror("Erreur",'Impossible d'interpréter le fichier "%s".nEst-il au bon format ?' % sourceentry.get(),parent=root)
À l'exécution, tout marche bien, excepté que j'ai ce message sur sdterr : SyntaxWarning: name 'serviceencours' is assigned to before global declaration def rafraichirapercu():
J'ai un peu de mal à comprendre ce qui chiffone Python (ce comportement est voulu) et surtout que faire pour y remédier. Est-ce que j'ai fait quelque chose de mal ?
Merci pour vos lumières...
Frédéric. Salut à toi.
Tu dois déclarer ta variable globale et l'initialiser avant ton if __name__=="__main__":
ce qui donne : serviceencours = None
if __name__=="__main__": serviceencours=None creeinterface() tk.mainloop()
Tu pouras ainsi t'en servir partout où tu l'aura "importée" avec le mot "global", comme dans la fonction :
def rafraichirapercu(): global serviceencours ...
Bon courage ;)
Bonjour
je débute en python alors désolé si ma question est un peu stupide.
J'ai écrit un programme (en fait une interface graphique pour un
ensemble de classes situé dans un autre module) qui doit gérer
(lire/transformer/écrire) une (et une seule) instance d'une classe
"service".
Comme corps du programme, j'ai :
if __name__=="__main__":
serviceencours=None
creeinterface()
tk.mainloop()
ici, serviceencours est modifié à l'intérieur de (une fonction appelée
par) creeinterface() (je passe les détails non relevants, et le
word-wrapping est "accidentel") :
def creeinterface():
rafraichirapercu()
def rafraichirapercu():
global serviceencours
try:
serviceencours=idef.service(sourceentry.get())
except:
serviceencours=None
if sourceentry.get()!="":
tkMessageBox.showerror("Erreur",'Impossible d'interpréter
le fichier "%s".nEst-il au bon format ?' % sourceentry.get(),parent=root)
À l'exécution, tout marche bien, excepté que j'ai ce message sur sdterr :
SyntaxWarning: name 'serviceencours' is assigned to before global
declaration
def rafraichirapercu():
J'ai un peu de mal à comprendre ce qui chiffone Python (ce comportement
est voulu) et surtout que faire pour y remédier. Est-ce que j'ai fait
quelque chose de mal ?
Merci pour vos lumières...
Frédéric.
Salut à toi.
Tu dois déclarer ta variable globale et l'initialiser avant ton
if __name__=="__main__":
ce qui donne :
serviceencours = None
if __name__=="__main__":
serviceencours=None
creeinterface()
tk.mainloop()
Tu pouras ainsi t'en servir partout où tu l'aura "importée" avec le mot "global", comme dans la
fonction :
je débute en python alors désolé si ma question est un peu stupide.
J'ai écrit un programme (en fait une interface graphique pour un ensemble de classes situé dans un autre module) qui doit gérer (lire/transformer/écrire) une (et une seule) instance d'une classe "service".
Comme corps du programme, j'ai :
if __name__=="__main__": serviceencours=None creeinterface() tk.mainloop()
ici, serviceencours est modifié à l'intérieur de (une fonction appelée par) creeinterface() (je passe les détails non relevants, et le word-wrapping est "accidentel") :
def creeinterface(): rafraichirapercu()
def rafraichirapercu(): global serviceencours try: serviceencours=idef.service(sourceentry.get()) except: serviceencours=None if sourceentry.get()!="": tkMessageBox.showerror("Erreur",'Impossible d'interpréter le fichier "%s".nEst-il au bon format ?' % sourceentry.get(),parent=root)
À l'exécution, tout marche bien, excepté que j'ai ce message sur sdterr : SyntaxWarning: name 'serviceencours' is assigned to before global declaration def rafraichirapercu():
J'ai un peu de mal à comprendre ce qui chiffone Python (ce comportement est voulu) et surtout que faire pour y remédier. Est-ce que j'ai fait quelque chose de mal ?
Merci pour vos lumières...
Frédéric. Salut à toi.
Tu dois déclarer ta variable globale et l'initialiser avant ton if __name__=="__main__":
ce qui donne : serviceencours = None
if __name__=="__main__": serviceencours=None creeinterface() tk.mainloop()
Tu pouras ainsi t'en servir partout où tu l'aura "importée" avec le mot "global", comme dans la fonction :
def rafraichirapercu(): global serviceencours ...
Bon courage ;)
Monsieur Dusnob
Salut
Salut à toi.
Tu dois déclarer ta variable globale et l'initialiser avant ton if __name__=="__main__":
ce qui donne : serviceencours = None
if __name__=="__main__": serviceencours=None creeinterface() tk.mainloop()
Merci pour ta réponse.
J'ai fait ça mais ça me donne exactement le même syntax warning. J'ai même essayé de rajouter un "global serviceencours" juste avant l'initialisation à None, mais ça ne change rien (ce qui est normal à mon avis, puisque global n'a de sens que dans une fonction).
Ce qui me gêne le plus, c'est de ne pas comprendre ce qui gêne python. C'est grave, dans une fonction, de déclarer qu'une variable est globale alors qu'elle possède déjà une valeur ?
Frédéric
Salut
Salut à toi.
Tu dois déclarer ta variable globale et l'initialiser avant ton
if __name__=="__main__":
ce qui donne :
serviceencours = None
if __name__=="__main__":
serviceencours=None
creeinterface()
tk.mainloop()
Merci pour ta réponse.
J'ai fait ça mais ça me donne exactement le même syntax warning. J'ai
même essayé de rajouter un "global serviceencours" juste avant
l'initialisation à None, mais ça ne change rien (ce qui est normal à mon
avis, puisque global n'a de sens que dans une fonction).
Ce qui me gêne le plus, c'est de ne pas comprendre ce qui gêne python.
C'est grave, dans une fonction, de déclarer qu'une variable est globale
alors qu'elle possède déjà une valeur ?
Tu dois déclarer ta variable globale et l'initialiser avant ton if __name__=="__main__":
ce qui donne : serviceencours = None
if __name__=="__main__": serviceencours=None creeinterface() tk.mainloop()
Merci pour ta réponse.
J'ai fait ça mais ça me donne exactement le même syntax warning. J'ai même essayé de rajouter un "global serviceencours" juste avant l'initialisation à None, mais ça ne change rien (ce qui est normal à mon avis, puisque global n'a de sens que dans une fonction).
Ce qui me gêne le plus, c'est de ne pas comprendre ce qui gêne python. C'est grave, dans une fonction, de déclarer qu'une variable est globale alors qu'elle possède déjà une valeur ?
Frédéric
Monsieur Dusnob
Oups... Désolé, le problème est résolu.
Suite à de nombreuses modifications, il restait un deuxième "global serviceencours" qui traînait dans le corps de la fonction rafraichirapercu().
J'ai viré cette seconde occurrence et tout est rentré dans l'ordre.
Désolé du dérangement...
Frédéric
Oups... Désolé, le problème est résolu.
Suite à de nombreuses modifications, il restait un deuxième "global
serviceencours" qui traînait dans le corps de la fonction
rafraichirapercu().
J'ai viré cette seconde occurrence et tout est rentré dans l'ordre.