烧杯缓存抱怨类型错误
问题描述:
烧杯缓存抱怨一个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中的所有内容)并重试吗?
你的名单上的第一个猜测是正确的。当我阅读你的评论时,我更仔细地修改了代码并发现了问题。谢谢! – Ivan 2011-02-20 06:08:35