2010-08-06 13 views
10

Estoy escribiendo un programa tonto en python para un amigo que imprime "¡Somos los caballeros que dicen 'Ni'!". luego duerme por 3 segundos, y luego imprime "Ni!" Veinte veces a intervalos aleatorios utilizando el método random del módulo uniform(). Aquí está mi código:Python: "nombre global 'time' no está definido"

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)) 

He tratado de importar este módulo escribiendo en el intérprete from silly import knights_of_ni()yimport silly, a continuación, llamar a la función, ya sea con knights_of_ni() o silly.knights_of_ni() (respectivamente), pero siempre tengo la misma excepción :

NameError: global name 'time' is not defined 

¿Qué causa este error y cómo puedo corregirlo?

Editar: francamente, no estoy seguro de qué problema tenía yo tampoco. Ejecuté el código a la mañana siguiente y funcionó bien. Juro que el código produjo errores anoche ... De todos modos, gracias por tu visión.

+1

Es muy importante que dé un paso atrás y comprenda correctamente cómo funciona 'import'. De lo contrario perderás mucho tiempo cambiando aleatoriamente tu código para que funcione. Tal vez deberías hacer otra pregunta sobre lo que no entiendes sobre 'import' –

+0

@gnibbler: definitivamente entiendo el comando de importación, usarás' import spam' para obtener un módulo completo, luego llamarás a cada función como 'spam.eggs() ', y usaría' from spam import eggs' para obtener una función específica y el espacio de nombres 'spam' para que pueda llamar a la función' eggs() '. –

Respuesta

21

Eso es imposible. Su ejemplo de código no es el mismo que el código que produjo ese error.

Tal vez tenía time.sleep(..) en lugar de sleep(..). Usted ha hecho from time import sleep. Para usar el formulario time.sleep(..) debe import time

+0

Sí, no tengo idea de qué sucedió, estoy seguro de que este código produjo un error anoche, pero no importa, funciona ahora ... Gracias por convencerme de que intente ejecutarlo de nuevo. –

+0

En realidad, sé exactamente lo que sucedió ... He hecho algunas cosas con "tiempo" en el intérprete, y cuando llamé a 'knights_of_ni' debe haberse confundido. –

+0

+1 funcionó, gracias – Anthony

0

Lo que dijo Jerub. Me encontré con el código exacto y funcionó:

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

disculpas por la necropost pero me encontré con este problema también, aunque de una manera ligeramente diferente.

Estaba ejecutando time.time() con mod_python en Apache y Python. Si intenté cargar la página con time.time(), fallaría quejándose de que "nombre global 'hora' no está definido". Sin embargo, si ingresara en mi servidor web y ejecutara exactamente el mismo método desde la línea de comando, funcionaría.

Al final, el reinicio del servicio Apache2 solucionó el problema. No estoy seguro de por qué esto ayudó. Supongo que el módulo se descargó en algún momento y luego no se volvió a cargar, a pesar del comando de importación de tiempo.

Es extraño y un poco misterioso. Lo siento, nunca he buscado la causa real, pero espero que esto ayude a la siguiente persona.

0

¡Tengo la respuesta! Tuve el mismo problema, solo reinicie su Canopy. No soy tan bueno en python ni para entender las computadoras, pero mi programa pensó que todavía llamaba "tiempo" a alguna parte, aunque no estaba en el código.

Cuestiones relacionadas