web-dev-qa-db-fra.com

Python: "le nom global 'heure' n'est pas défini"

J'écris un programme idiot en python pour un ami qui affiche "Nous sommes les chevaliers qui disent 'Ni'!". puis dort pendant 3 secondes, puis imprime "Ni!" vingt fois à des intervalles aléatoires à l'aide de la méthode uniform() du module random. Voici mon code:

from time import sleep
import random

def knights_of_ni():
    generator = random.Random()
    print "We are the knights who say 'ni'."
    sleep(3)
    for i in range(0,20):
        print "Ni!"
        sleep(generator.uniform(0,2))

J'ai essayé d'importer ce module en tapant dans l'interprète from silly import knights_of_ni() et import silly, puis en appelant la fonction avec knights_of_ni() ou silly.knights_of_ni() (respectivement), mais j'ai toujours la même exception:

 NameError: global name 'time' is not defined

Qu'est-ce qui cause cette erreur et comment puis-je réparer mon code?

Edit: franchement, je ne suis pas sûr du problème que je rencontrais non plus. J'ai exécuté le code le lendemain matin et cela a bien fonctionné. Je jure que le code a généré des erreurs la nuit dernière ... Quoi qu'il en soit, merci pour votre perspicacité.

15
Rafe Kettler

C'est impossible. Votre exemple de code n'est pas le même que le code qui a généré cette erreur.

Peut-être que vous aviez time.sleep(..) au lieu de sleep(..). Vous avez terminé from time import sleep. Pour utiliser le formulaire time.sleep(..), vous devez import time

26
Jerub

Toutes mes excuses pour la nécroposte, mais j'ai rencontré ce problème aussi, mais d'une manière légèrement différente.

J'utilisais time.time() avec mod_python sous Apache et Python. Si j’essayais de charger la page avec time.time() dessus, je ne pourrais pas me plaindre du fait que "le nom global" heure "n’est pas défini". Cependant, si je ssh'd sur mon serveur Web et exécutais exactement la même méthode à partir de la ligne de commande, cela fonctionnerait. 

En fin de compte, le redémarrage du service Apache2 a résolu le problème. Je ne sais pas pourquoi cela a aidé. J'imagine que le module a été déchargé à un moment donné et qu'il ne pourrait pas être rechargé malgré la commande d'importation.

C'est étrange et un peu mystérieux. Désolé, je n'ai jamais traqué la cause, mais j'espère que cela aidera la personne suivante.

2
shaun m

Qu'est-ce que Jerub a dit. J'ai couru votre code exact et cela a fonctionné:

>>> import silly
>>> silly.knights_of_ni()
We are the knights who say 'ni'.
Ni!
Ni!
Ni!
Ni!
Ni!
Ni!
0
Katriel

En important la fonction dans un autre fichier avant de l'appeler, vous importez seulement le contenu de cette fonction. Les importations en haut de ce fichier ne sont pas importées dans votre autre fichier. Vous devriez mettre vos deux importations dans la fonction afin qu'elle ressemble à ceci:

def knights_of_ni():
    from time import sleep
    import random
    <the function contents>

Cela vérifiera que les importations souhaitées sont disponibles à l'emplacement où vous appelez la fonction. Python ne le permet pas. Si l'heure est importée dans le fichier où cette fonction est importée, il n'y a pas de risque de double importation.

0
Emily

J'ai la réponse! J'ai eu le même problème, il suffit de redémarrer votre Canopy. Je ne suis pas très bon en python ou en compréhension de l'informatique, mais mon programme pensait que j'appelais toujours «time» quelque part, même si ce n'était pas dans le code.

0
Appie Kalac