Python's way of checking function parameter data types through decorators

  • 2020-04-02 14:39:06
  • OfStack

This example shows how python USES decorators to check the data types of function parameters. Share with you for your reference. Specific analysis is as follows:

This code defines a python decorator, which can be used to check whether the parameters of the specified function are of the specified type or not. It is very convenient to add this decorator to the function definition to clearly detect the types of the function parameters

def accepts(exception,**types):
    def check_accepts(f):
        assert len(types) == f.func_code.co_argcount,
        'accept number of arguments not equal with function number of arguments in "%s"' % f.func_name
        def new_f(*args, **kwds):
            for i,v in enumerate(args):
                if types.has_key(f.func_code.co_varnames[i]) and
                    not isinstance(v, types[f.func_code.co_varnames[i]]):
                    raise exception("arg '%s'=%r does not match %s" %
                        (f.func_code.co_varnames[i],v,types[f.func_code.co_varnames[i]]))
                    del types[f.func_code.co_varnames[i]]
            for k,v in kwds.iteritems():
                if types.has_key(k) and not isinstance(v, types[k]):
                    raise exception("arg '%s'=%r does not match %s" %
                        (k,v,types[k]))
            return f(*args, **kwds)
        new_f.func_name = f.func_name
        return new_f
    return check_accepts
def exmaple():
    @accepts(Exception,a=int,b=list,c=(str,unicode))
    def test(a,b=None,c=None)
        print 'ok'
    test(13,c=[],b='df')

I hope this article has helped you with your Python programming.


Related articles: