Python: "全局名称'time'未定义

30 投票
8 回答
139305 浏览
提问于 2025-04-16 02:24

我正在为朋友写一个搞笑的程序,这个程序会打印出“We are the knights who say 'Ni'!”。然后它会暂停3秒钟,接着在随机的时间间隔内打印“Ni!”二十次,使用的是random模块里的uniform()方法。以下是我的代码:

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

我尝试通过在解释器中输入from silly import knights_of_ni() import silly来导入这个模块,然后用knights_of_ni()或者silly.knights_of_ni()来调用这个函数,但我总是得到同样的错误:

 NameError: global name 'time' is not defined

是什么导致了这个错误,我该如何修复我的代码呢?

补充一下:老实说,我也不太确定我遇到了什么问题。我第二天早上运行代码时,它就正常工作了。我发誓昨晚代码是出错的……无论如何,感谢你的见解。

8 个回答

2

抱歉打扰大家,不过我也遇到了这个问题,只是情况稍微不同。

我在Apache和Python下用mod_python运行time.time()。当我试图加载包含time.time()的页面时,它会报错,提示“全局名称'time'未定义”。但是,如果我通过SSH登录到我的服务器,直接在命令行运行同样的方法,就能正常工作。

最后,重启Apache2服务解决了这个问题。我不太明白为什么这样有效。我猜可能是某个模块在某个时候被卸载了,然后即使有import time的命令也无法重新加载。

这真是奇怪,有点神秘。抱歉我没有深入查找实际原因,但希望这能对下一个遇到这个问题的人有所帮助。

5

下面的代码都能正常运行:

import time

time.sleep(3)
from time import sleep

sleep(3)
57

这不可能。你给的代码示例和产生那个错误的代码不一样。

也许你用了 time.sleep(..),而不是 sleep(..)。你已经写了 from time import sleep。如果想用 time.sleep(..) 这种写法,你必须先写 import time

撰写回答