我试图总结我的映射器/减速功能的东西,如:在MapReduce mapper/reducer函数中使用装饰器?
def log_exceptions_to_sentry(sentry_id, raise_exception):
def decorator(fn):
def wrapper(*args, **kwargs):
try:
return fn(*args, **kwargs)
except Exception, e:
client = Client(sentry_id)
client.captureException(
exc_info=sys.exc_info())
if raise_exception:
raise e
return wrapper
return decorator
所以我的映射器/减速功能样子:
@log_exceptions_to_sentry(SENTRY_ID, False)
def my_mapper_fn(item):
logging.info(item)
但它似乎并没有工作。没有装饰者,我会发现INFO
日志item
。但是,如果我把装饰器,似乎映射器/减速器功能根本不会被调用。
我希望能够轻松记录我的函数可能有的任何错误,所以我可以修复它们,因为试图通过AppEngine的日志追踪MapReduce几乎是不可能的。
我可以用try ... except
块封装整个函数体,但是装饰器会更干净。
不要说'养e'只说'raise',否则抛出异常一个新的回溯。 – Daniel
不要在decorator-call后面加上:这是一个语法错误 – Daniel
糟糕,谢谢Daniel。 – john2x