2013-11-04 10 views
1

我是Python和Django的新手。我正在研究輪詢教程,並決定在這裏發佈一個問題,這是比Python更多的Python ... 在Writing Your First Django App, part 5, - >Writing our first test,他們提出了一個錯誤,然後創建一個測試來暴露該錯誤,運行測試將導致測試失敗。爲什麼我不能在django poll教程第5部分的bug修復中使用now變量

修復如下 - >修改models.py中的方法如下 - >測試將返回true

def was_published_recently(self): 
    now = timezone.now() 
    return now - datetime.timedelta(days=1) <= self.pub_date < now 

我的問題是,當我沒有替代變量now,測試將fail下面輸入。這是爲什麼?這不是一個簡單的替代?

def was_published_recently(self): 
    return timezone.now() - datetime.timedelta(days=1) <= self.pub_date < timezone.now() 
+2

你真的用無效的[** indentation **](http://www.diveintopython.net/getting_to_know_python/indenting_code.html)(從同一列開始的'def'和'return')編寫代碼嗎?這會導致語法錯誤,並且測試失敗。 –

+3

這不完全相同,在你的替換之後,timezone.now()被調用了兩次,而那些次數不是相同的(可能是毫秒差)。我不知道這是否是tho的原因。 – utdemir

+0

除了縮進(這似乎只是一個複製和粘貼問題),真正的錯誤是在調用now()兩次,就像@ utdemir描述的一樣。 –

回答

1

理解上的差異,最簡單的方法是用一些例子:

In [4]: timezone.now() == timezone.now() 
Out[4]: False 

In [5]: a = timezone.now() 
In [6]: a == a 
Out[6]: True 


In [11]: print timezone.now() - timezone.now() 
-1 day, 23:59:59.999984 

In [12]: print a - a 
0:00:00 

你應該在每次調用timezone.now()時注意到,你會得到不同的時間。

+0

我應該執行這個基本的測試。謝謝。 – chanquest

+0

如果答案對您有用,請考慮接受答案。 – moenad

1

第一個函數獲取當前時間,然後將該值保存在變量now中。然後該值在下一行中使用兩次(不變)。

然而,第二個函數調用timezone.now兩次。這意味着你將得到兩個不同的次;每次通話一個。當然,他們最多隻會停幾毫秒,但這仍然是一個區別。

請記住,每當您撥打timezone.now時,它將返回當前時間。因此,沒有兩個調用會返回相同的值。

+0

這是正確的。我能夠測試這個。謝謝。 – chanquest

+0

@chanquest - 高興地幫忙!不要忘記接受答案(點擊勾號),以便人們知道這個問題得到解答。 – iCodez

相關問題