Python:“全局名称'时间'未定义”

时间:2010-08-06 05:48:12

标签: python time

我正在写一个愚蠢的程序在python中为朋友打印“我们是那些说'Ni'的骑士!”。然后睡3秒钟,然后打印“Ni!”使用random模块的uniform()方法以随机间隔进行20次。这是我的代码:

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()或{{1}调用该函数(分别),但我总是得到同样的例外:

silly.knights_of_ni()

导致此错误的原因是什么?我如何修复我的代码?

编辑:坦率地说,我不确定我遇到了什么问题。我第二天早上运行了代码并且工作得很好。我发誓昨晚代码产生了错误...无论如何,感谢您的见解。

5 个答案:

答案 0 :(得分:27)

那是不可能的。您的代码示例与产生该错误的代码不同。

也许你有time.sleep(..)而不是sleep(..)。你做了from time import sleep。要使用time.sleep(..)表单,您必须import time

答案 1 :(得分:2)

对于necropost道歉,但我也遇到了这个问题,但方式略有不同。

我在Apache和Python下使用mod_python运行time.time()。如果我尝试加载带有time.time()的页面,则会失败,抱怨未定义“全局名称'时间'”。但是,如果我ssh到我的网络服务器并从命令行运行完全相同的方法,它将工作。

最后,重新启动Apache2服务解决了这个问题。我不确定为什么这有帮助。我想模块在某个时候被卸载然后不会重新加载,尽管导入时间命令。

这很奇怪,有点神秘。对不起,我从来没有追捕过实际的原因,但希望这有助于下一个人。

答案 2 :(得分:1)

通过在调用函数之前将函数导入另一个文件中,您仅是在导入该函数的内容。该文件顶部的导入不会导入到您的其他文件中。您应该将两个导入都放入函数中,使其看起来像这样:

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

这将验证所需的导入在调用函数的位置中可用。不必担心双重导入,因为python不允许这样做-如果在导入此函数的文件中导入了时间,则不会重新输入

答案 3 :(得分:0)

杰鲁布说。我运行了您的确切代码并且有效:

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

答案 4 :(得分:0)

我有答案!我有同样的问题,只需重新启动你的Canopy。我不擅长python或理解计算机,但我的程序认为我仍然称之为“时间”#39;某处,即使它不在代码中。