我正在写一个愚蠢的程序在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()
导致此错误的原因是什么?我如何修复我的代码?
编辑:坦率地说,我不确定我遇到了什么问题。我第二天早上运行了代码并且工作得很好。我发誓昨晚代码产生了错误...无论如何,感谢您的见解。答案 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;某处,即使它不在代码中。