1. 程式人生 > 實用技巧 >python 自定義裝飾器

python 自定義裝飾器

  1. 提醒使用者使用了廢棄的函式
def deprecated(func):
    """This decorator is used to mark functions as deprecated.
    It will result in a warning being emitted when the function is used.
    """

    @functools.wraps(func)
    def new_func(*args, **kwargs):
        warnings.simplefilter('always', DeprecationWarning)  # turn off filter
        warnings.warn(
            "Call to deprecated function {}.".format(func.__name__),
            category=DeprecationWarning,
            stacklevel=2
        )
        warnings.simplefilter('default', DeprecationWarning)  # reset filter
        return func(*args, **kwargs)

    return new_func
  1. 裝飾類中函式的裝飾器,給函式增加報錯功能
# 裝飾類中函式的裝飾器第一個引數是self
def connection_closed_handler(function):
    """Handle ConnectionClosedException."""
    @wraps(function)
    def _wrap(inst, *args, **kwargs):
        try:
            return function(inst, *args, **kwargs)

        except (ConnectionClosedException, WebSocketConnectionClosedException):
            inst.logger.warn("the connection lost. Resetting ...")
            inst.reset(args[1])
            return function(inst, *args, **kwargs)
    return _wrap