【发布时间】:2014-02-18 12:21:54
【问题描述】:
我想用 redis 缓存构建我的应用程序。但在我们的案例中,redis 可能并非一直可用,
所以我希望,它 redis 运行良好,我们使用它。如果它不能工作,只需记录并这次忽略它。
例如:
尝试: conn.sadd('s', *array) 除了 : ...因为有很多地方我会运行一些 conn.{rediscommand},我不喜欢在每个地方都使用 try/except。
所以解决方案可能:
类软缓存(redis.StrictRedis): def 悲伤(键,* p): 尝试: super(redis.StrictRedis, self).sadd(key, p) 除了: ..但是由于redis有很多命令,所以我得一个一个地扭曲它们。
是否可以为一个类自定义一个异常处理程序来处理来自该类的所有异常?
【问题讨论】:
-
看看Exceptions for the whole class。您可以按照建议使用装饰器或调度器。
-
语法是
try: ... except: ... -
这就是context managers 的用途。
-
@Bakuriu 上下文管理器的问题是每次执行函数调用时都必须编写
with块。我认为包装器/代理会更有用(在捕获所有内容的错误内......) -
@ikaros45 我认为这不是问题。如果函数是在库中定义的,您不想要修改它只是为了避免键入
with。如果其他人阅读您的代码,他将无法理解到底发生了什么。 如果函数是你自己定义的,那么使用装饰器添加异常处理肯定会更好。