2012-07-22 68 views
0

該程序首次打印失效。我期望代碼在打印過期前至少打印4次「未過期」。有人可以請解釋原因,並幫助我糾正代碼。謝謝執行超時。下面的代碼有什麼問題?

import time 
TIMEOUT = 5 

class Timer(): 
    def __init__(self): 
     self.timeout = time.time()+TIMEOUT 
    def isExpired(): 
     return time.time() > self.timeout 

timing = Timer() 

def main(): 
    while 1: 
     if timing.isExpired: 
      print "Expired" 
      return 
     else: 
      print "Not expired" 
      print "sleeping for 1 second" 
      time.sleep(1) 

if __name__== "__main__": 
    main() 

回答

3

你有幾個問題:

  1. 你沒有給你的isExpired方法的自我說法。將其定義爲def isExpired(self):

  2. 您正在每個循環迭代上創建一個新的Timer實例。在while循環外移動timing = Timer()

  3. timing.isExpired是對方法對象iself(在布爾上下文中始終爲true)的引用。你需要做timing.isExpired()來實際調用它。

這些都是與Timer沒有任何關係的基本Python問題。閱讀the Python tutorial以瞭解如何使用類等。

+0

我得到errorTypeError:isExpired()不帶任何參數(1給出) – user1488987 2012-07-22 21:36:43

+0

@ user1488987參考點號1 - 當你打電話給你的暗示給實例作爲一個實例函數第一個參數,函數'isExpired'根本不接受任何參數。 – zenpoy 2012-07-22 21:43:06

1

您每次都創建Timer實例。把它從循環中拿走,否則你的while循環永遠不會終止。此外,您需要撥打timing.isExpired,因爲這是一種方法。所以,你的代碼應該是:

import time 
TIMEOUT = 60 * 5 

class Timer(): 
    def __init__(self): 
     self.timeout = time.time()+TIMEOUT 
    def isExpired (self): 
     return time.time() > self.timeout 


def main(): 
    timing = Timer() 
    while 1: 
     if timing.isExpired(): 
      print "Expired" 
      return 
     else: 
      print "Not expired" 
      print "sleeping for 1 second" 
      time.sleep(1) 
+0

我帶了Timer實例。但該計劃的行爲仍然相同。 – user1488987 2012-07-22 21:39:37

+0

謝謝@madfriend – user1488987 2012-07-22 21:43:37

+0

@ user1488987我測試過它,它的工作原理。問題是超時時間是300秒,所以如果你不耐煩,你應該減少這個數字:) – madfriend 2012-07-22 21:43:37