Декоратор для безопасного запуска функции (подавления и логгинга исключений)
def safely(default=None, log=None):
'''
Декоратор, игнорируем исключения
**default = значение возвращаемое при ошибке
**log = функция для логгинга трейсбэков (например logging.error)
'''
def decorator(func):
def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
except (KeyboardInterrupt, SystemExit):
raise
except Exception, ex:
if log:
log(traceback.format_exc())
return default
return wrapper
return decorator