2011-02-19 76 views
0

燒杯緩存抱怨一個TypeError。我在谷歌搜索,甚至跟蹤燒杯的問題跟蹤器,但找不到任何東西。燒杯緩存抱怨類型錯誤

我緩存查詢,如下面的方法

@staticmethod 
def get_queries(query): 
    @cache.cache(query, type = 'file', expire = 300) 
    def load(query): 
     entries = db.get_expensive_query(query) 
     return entries 
    return load(query) 

然而,當我運行該程序,這是我收到;

File "/Users/ivan/project/controller/caching.py", line 15, in get_queries 
     return load(query) 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 417, in cached 
    return cache[0].get_value(cache_key, createfunc=go) 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/cache.py", line 214, in get 
    return self._get_value(key, **kw).get_value() 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 256, in get_value 
    if not self._is_expired(stored, expired): 
    File "/Library/Python/2.6/site-packages/Beaker-1.5.4-py2.6.egg/beaker/container.py", line 245, in _is_expired 
    time.time() >= expiretime + storedtime 
TypeError: cannot concatenate 'str' and 'float' objects 

我做錯了什麼或者是燒杯的錯誤?

回答

0

代碼調用cache.cache與到期的整數,這是正確的,但很明顯,無論是expiretime或storedtime被纏繞了一個字符串。 [從錯誤信息它必須是expiretime。 --ed]因此,這裏是我想到的事情發生:

(1)你調用一個字符串cache.cache到期在一些點。 [可能甚至從CacheManager中默認的cache.expire選擇,不確定。]

(2)您修復了錯誤,生成了您提交的代碼(適用於我)。 (3)您在不刪除高速緩存目錄的情況下重新編碼,因此它以某種方式獲取了以前的狀態。

我可以按照上述處方重現你的錯誤。你可以刪除你的緩存(cache.data_dir和cache.lock_dir中的所有內容)並重試嗎?

+0

你的名單上的第一個猜測是正確的。當我閱讀你的評論時,我更仔細地修改了代碼並發現了問題。謝謝! – Ivan 2011-02-20 06:08:35