【问题标题】:Python decorator that let's method run or raise an exception让方法运行或引发异常的 Python 装饰器
【发布时间】:2017-03-28 14:49:51
【问题描述】:

我需要一个装饰器,它接受一个参数并检查(基于一些简单的逻辑)该方法是否应该被允许运行或引发异常。

class One(obj):
    trend = "trend"
    @myDecorator(self.trend)
    def click_button(self):
        clickable_element = self.driver.find_element_by_id(self.trend)
        clickable_element.click()
        return self


class Two(obj):
    map = "map"

    @myDecorator(self.map)
    def click_button(self):
        clickable_element = self.driver.find_element_by_id(self.map)
        clickable_element.click()
        return self

逻辑应该是这样的:

def my Decorator(arg):
    if arg:
        "run the method"
    else:
        raise "Exception"

【问题讨论】:

    标签: python python-decorators


    【解决方案1】:
    def parametrised_decorator(parameter):
        def parametrised(function):
            @functools.wraps(function)
            def inner(*args, **kwargs):
                if parameter:
                    return function(*args, **kwargs)
                else:
                    raise Exception()
    
            return inner
    
        return parametrised
    

    【讨论】:

      【解决方案2】:
      def my_Decorator(arg=None):
          def decorator(func):
              def wrapper(*args, **kwargs):
                  if arg:
                      return func(*args, **kwargs)
      
                  else:
                      raise Exception()
      
              return wrapper
      
          return decorator
      

      【讨论】:

        【解决方案3】:
        from functools import wraps
        
        
        def my_decorator(f):
            @wraps(f)
            def wrapper(*args, **kwargs):
                if kwargs.pop('runit', None):
                    return f(*args, **kwargs)
                else:
                    raise Exception()
            return wrapper
        
        
        @my_decorator
        def example():
            print('example')
        
        
        if __name__ == '__main__':
            # runs function
            example(runit=True)
            # runs exception
            example()
        

        【讨论】:

          猜你喜欢
          • 2014-02-17
          • 2019-11-22
          • 2013-01-20
          • 2019-03-20
          • 2015-03-27
          • 2016-03-16
          • 2017-08-20
          • 1970-01-01
          • 2010-10-16
          相关资源
          最近更新 更多