0

ビーカーキャッシュは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

私は何か間違ったことをしていますか、それともこれはビーカーのバグですか?

4

1 に答える 1

0

コードは、expireの整数を使用してcache.cacheを呼び出します。これは正しいですが、expiretimeまたはstoredtimeのいずれかが文字列で終了していることは明らかです。[エラーメッセージから、expiretimeである必要があります。--ed]これが私が起こったと思うことです:

(1)ある時点で有効期限が切れる文字列を使用してcache.cacheを呼び出しました。[おそらく、CacheManagerのデフォルトのcache.expireからでも、選択するかどうかはわかりません。]

(2)バグを修正し、提出したコードを作成しました(これは私にとってはうまくいきます)。

(3)キャッシュディレクトリを削除せずにコードを再実行したため、どういうわけか以前の状態を取得しました。

上記の処方箋に従うことで、あなたの誤りを再現することができます。キャッシュ(cache.data_dirとcache.lock_dirのすべて)を削除して、再試行できますか?

于 2011-02-19T04:37:53.310 に答える