我在一个带有基于pylibmc的后端的Python项目中使用dogpile.cache。创建区域后,我使用类似以下内容:
@region.cache_on_arguments()
def run_some_query(**kwargs):
# ... Query code ...
return query_results
我的问题是,装饰者提出了某些例外,我只想忽略这些例外。例如,如果memcached不可用,或者结果太大。
有没有一种方法可以实现而无需滚动自己的自定义装饰器?而且,如果我必须创建一个自定义装饰器,那么实现它的好方法是什么。
答案 0 :(得分:0)
装饰器只是功能。因此,您需要更改功能。 Python无法在现有函数中禁用该异常。
您可以继承发生异常处理的类并覆盖此方法。
除了,有一种方法,但是它涉及跟踪,因此需要小心。
答案 1 :(得分:0)
我设法解决了这个问题。事实证明,解决方案毕竟是在dogpile.cache文档中,而我却错过了。该解决方案可以在文档的Changing Backend Behavior部分中找到。这个想法很简单:按照文档中的描述创建一个代理后端,然后在将区域配置为包括该代理后端时使用wrap参数。