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

2024-05-15 21:12:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用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()silly.knights_of_ni()调用函数来导入此模块,但始终得到相同的异常:

 NameError: global name 'time' is not defined

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

编辑:坦率地说,我也不知道我有什么问题。第二天早上我运行了代码,它运行得很好。我发誓昨晚代码出错了。。。无论如何,谢谢你的洞察力。


Tags: 模块of代码fromimporttimesleeprandom
3条回答

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

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

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

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

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

为尸检道歉,但我也遇到了这个问题,虽然方式略有不同。

我在Apache和python下用mod_python运行time.time()。如果我试图加载带有time.time()的页面,它将无法抱怨“没有定义全局名称‘time’”。但是,如果我用ssh连接到我的web服务器并从命令行运行完全相同的方法,它就会工作。

最后,重启Apache2服务解决了这个问题。我不知道这有什么用。我想模块在某个时候卸载了,然后就不会重新加载,尽管有import time命令。

很奇怪,有点神秘。抱歉,我从来没有找到真正的原因,但希望这有助于下一个人。

相关问题 更多 >