2011-03-07 82 views
0

客戶發現這個錯誤,我的軟件使用Python 2.5.5。怎麼會這樣? _empty是否已從隊列中消失?我根本不明白這一點。我沒有從隊列繼承,只有Queue類的普通實例。在我的機器上似乎工作正常,但是,在客戶的機器上出現錯誤。任何人都可以給我一些建議,問題可能是什麼?AttributeError:隊列實例沒有屬性'_empty'

問題曾經發生在這裏:put_nowait,QSIZE,得到:

import Queue 

self.requests.mutex.acquire() 
allCount = self.requests._qsize() 
while not self.requests._empty(): 
    try: 
     (sock, addr, _) = self.requests._get() 
     # ... do some things 
self.requests.mutex.release() 

之前,隊列與

self.requests = Queue(self.reqQLen) 

而且這些隊列方法還採用了模塊初始化。該隊列用於多線程環境中。這可能是原因嗎?

我想知道:錯誤消息告訴我變量請求被識別爲一個隊列實例,但屬性_empty不存在。但是,這是Queue類中的常規方法。

+0

您和您的客戶正在運行什麼版本的Python? – nmichaels 2011-03-07 15:22:02

+0

兩個版本2.5.5。 – robsch 2011-03-07 15:53:12

回答

5

我對此不是很熟悉(我不知道你使用的是什麼版本的Python),但是看documentation我看不到_empty屬性,但只有一個empty()方法。由於前導下劃線用於表示私有屬性,因此我認爲它的存在可能不是標準化的,但依賴於實現,而使用empty()方法反而是正確的解決方案。

+0

使用版本2.5.5。我想,使用私人方法不應該是一個問題。 – robsch 2011-03-07 15:32:42

+5

@Robert:領導下劃線*呼喊*「如果你使用它,它會改變/消失,這是你的錯」。私人東西是私人的,因爲外面的人都不應該知道(讓它使用)它。 – delnan 2011-03-07 15:36:09

+0

所以我不得不期待某些東西在Queue實例中刪除方法?或者可以說這個錯誤是一個證明某種東西已經消除了方法的直接證據嗎?隊列實現看起來很無辜... – robsch 2011-03-07 15:49:54

相關問題