【问题标题】:Python: "global name 'time' is not defined"Python:“未定义全局名称'时间'”
【发布时间】:2011-03-26 04:16:27
【问题描述】:

我正在用 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

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

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

【问题讨论】:

  • 退后一步并正确理解import 的工作原理对您来说非常重要。否则,您将浪费大量时间随机更改代码以使其正常工作。也许你应该再问一个关于import的不理解的问题
  • @gnibbler:我绝对理解import命令,你会用import spam得到一个完整的模块,然后调用每个函数spam.eggs(),你会用from spam import eggs得到一个特定的函数和spam 命名空间,所以你可以调用函数eggs()

标签: python time


【解决方案1】:

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

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

【讨论】:

  • 是的,我不知道发生了什么,我确定这个代码昨晚产生了一个错误,但没关系,它现在可以工作了......感谢您说服我再次尝试运行它。
  • 其实,我完全知道发生了什么......我在解释器中用time 做了一些事情,当我打电话给knights_of_ni 时,它一定很困惑。
  • 6 年后,我收到了同样的错误消息。而这正是我所犯的错误。
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        我有答案了!我遇到了同样的问题,只需重新启动您的 Canopy。我不太擅长 python 或理解计算机,但我的程序认为我仍然在某个地方调用“时间”,即使它不在代码中。

        【讨论】:

          猜你喜欢
          • 2017-02-03
          • 2013-08-23
          • 2013-11-12
          • 2014-12-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多