2010-08-06 34 views
10

我正在寫一個愚蠢的程序在python中打印出一個朋友,「我們是說'倪'的騎士!'」。然後睡3秒鐘,然後打印「倪!」使用random模塊的uniform()方法以隨機間隔二十次。這裏是我的代碼:Python:「全球名字'時間'沒有被定義」

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 

什麼是導致此錯誤,我該如何解決我的代碼?

編輯:坦白說,我不知道我有什麼問題。第二天早上我運行了代碼,它工作得很好。我發誓該代碼昨晚產生錯誤...無論如何,感謝您的洞察力。

+1

真正重要的是你退後一步,正確理解'import'的工作原理。否則,您會浪費大量時間隨機更改您的代碼,試圖使其正常工作。也許你應該問另一個關於'import'的問題' – 2010-08-06 06:34:12

+0

@gnibbler:我完全理解導入命令,你可以使用'import spam'來獲得一個完整的模塊,然後調用每個函數作爲'spam.eggs ()',你可以使用'from spam import eggs'來得到一個特定的函數和'spam'命名空間,所以你可以調用egg()函數。 – 2010-08-06 16:30:58

回答

21

這是不可能的。您的代碼示例與生成該錯誤的代碼不同。可能你有time.sleep(..)而不是sleep(..)。你完成了from time import sleep。要使用time.sleep(..)表格,您必須使用import time

+0

是的,我不知道發生了什麼,我確信這個代碼昨晚產生了一個錯誤,但無論如何,它現在工作....感謝說服我再次嘗試運行它。 – 2010-08-06 16:32:02

+0

實際上,我確切地知道發生了什麼......我在解釋器中用'time'做了一些事情,當我給'knights_of_ni'打電話時,它一定會變得困惑。 – 2010-08-06 16:33:51

+0

+1它的工作,謝謝 – Anthony 2013-03-07 14:37:08

0

傑羅布說了些什麼。我跑你確切的代碼和它的工作:

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

道歉的necropost,但我遇到了這個問題太雖然在一個稍微不同的方式。

我在Apache和Python下使用mod_python運行time.time()。如果我試圖在頁面上加載time.time(),它會失敗,抱怨「全局名稱時間」未被定義「。但是,如果我登錄到我的網絡服務器並從命令行運行完全相同的方法,則它將起作用。

最後,重新啓動Apache2服務解決了問題。我不知道爲什麼這有助於。我猜這個模塊在某個時候被卸載了,然後不會重新加載,儘管有import time命令。

這很奇怪,有點神祕。對不起,我從來沒有找到真正的原因,但希望這有助於下一個人。

0

我已經得到了答案!我有同樣的問題,只需重新啓動您的Canopy。我不擅長Python或理解計算機,但我的程序認爲我仍然在某處稱爲'時間',儘管它不在代碼中。