我試圖總結我的映射器/減速功能的東西,如:在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