Beaker缓存会引发TypeError。我在Google上搜索过,甚至跟踪过烧杯的问题跟踪器,却找不到任何东西。
我像以下方法一样缓存查询
@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 :(得分:0)
您的代码调用cache.cache并使用整数表示expire,这是正确的,但很明显expiretime或storedtime用字符串清理。 [从错误消息中它必须是到期时间。 - 所以这就是我认为发生的事情:
(1)您调用了cache.cache,其字符串在某个时刻到期。 [也许甚至从CacheManager中的默认cache.expire选择,不确定。]
(2)您修复了错误,生成了您提交的代码(适用于我)。
(3)您重新编写代码而不删除缓存目录,因此它以某种方式获取了之前的状态。
我可以按照上述处方重现您的错误。你能删除你的缓存(cache.data_dir和cache.lock_dir中的所有内容)并再试一次吗?