+ 我要发布
我发布的 我的标签 发现
浏览器扩展
斑点象@Edge

Python自定义记录异常的修饰器

将每个方法中的 try...catch... 抽出来,写成一个修饰器,代码简单更容易维护 以下是无参修饰器: ``` from functools import wraps def log_exception(func): @wraps(func) def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: print("[error in {}] message: {}\nargs:{}\nkwargs:{}" .format(func.__name__, str(e), args, kwargs)) return None return wrapper ``` 以下是有参修饰器: ``` def log_exception(log_ua=False, error_return=None): """ Args: log_ua(bool): 是否记录UA头信息。默认为False error_return(object): 发生错误时返回的内容。默认为None Returns: 发生错误时,返回None Raises: 异常说明 """ def decorate(func): @wraps(func) def wrapper(*args, **kwargs): try: return func(*args, **kwargs) except Exception as e: logfile("[log_exception in func:{}] message: {}\nargs:{}\nkwargs:{}" .format(func.__name__, str(e), args, kwargs)) if log_ua: _log_ua() # raise return error_return return wrapper return decorate ``` 在需要 try...catch... 的方法前加上,以有参修饰器为例: ``` @log_exception(log_ua=False, error_return=0) def my_func(): ... ``` 如果func抛出异常,则返回 0
我的笔记