烧杯缓存抱怨类型错误

烧杯缓存抱怨类型错误

问题描述:

烧杯缓存抱怨一个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 

我做错了什么或者是烧杯的错误?

代码调用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