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

我做错了什么还是这是一个烧杯的错误?

4

1 回答 1

0

您的代码使用整数调用 cache.cache 来表示 expire,这是正确的,但显然 expiretime 或 storedtime 都以字符串结尾。[从错误消息来看,它必须是过期时间。--ed]所以这就是我认为发生的事情:

(1) 您调用 cache.cache 时带有一个字符串 expire 在某个时间点。[甚至可能来自 CacheManager 选项中的默认 cache.expire,不确定。]

(2) 您修复了错误,生成了您提交的代码(对我有用)。

(3) 您在没有删除缓存目录的情况下重新运行代码,因此它以某种方式恢复了以前的状态。

我可以按照上述规定重现您的错误。您能否删除您的缓存(cache.data_dir 和 cache.lock_dir 中的所有内容)并重试?

于 2011-02-19T04:37:53.310 回答