处理 dogpile.cache 装饰器异常

Handling dogpile.cache decorator exceptions

我在 Python 项目中使用 dogpile.cache,后端基于 pylibmc。创建区域后,我使用类似的东西:

@region.cache_on_arguments()
def run_some_query(**kwargs):
    # ... Query code ...
    return query_results

我的问题是,装饰器会引发某些异常,我只想忽略这些异常。例如,如果 memcached 不可用,或者结果太大。

有没有办法在不滚动我自己的自定义装饰器的情况下实现这一点?如果我必须创建自定义装饰器,实现它的好方法是什么。

装饰器只是函数。所以你需要改变功能。 Python 无法禁用现有函数中的异常。

您可以继承发生此异常处理的 class 并覆盖此方法。

除此之外,还有一种方法,但是涉及到追踪,需要小心。

我已经设法解决了这个问题。事实证明,解决方案毕竟在 dogpile.cache 文档中,我错过了。可以在文档的 Changing Backend Behavior 部分找到解决方案。这个想法很简单:按照文档中的描述创建一个代理后端,然后在配置区域时使用 wrap 参数来包含这个代理后端。