zoukankan      html  css  js  c++  java
  • python 验证数据类型函数

    在查看谷歌API类时发现这个函数,发现有问题,先上原函数:

     1 def ValidateTypes(vars_tpl):
     2   """Checks that each variable in a set of variables is the correct type.
     3 
     4   Args:
     5     vars_tpl: A tuple containing a set of variables to check.
     6 
     7   Raises:
     8     ValidationError: The given object was not one of the given accepted types.
     9   """
    10   for var, var_types in vars_tpl:
    11     if not isinstance(var_types, tuple):
    12       var_types = (var_types,)
    13     for var_type in var_types:
    14       if isinstance(var, var_type):
    15         return
    16     msg = ('The \'%s\' is of type %s, expecting one of %s.'
    17            % (var, type(var), var_types))
    18     raise ValidationError(msg)
    19 
    20 
    21  d = {'d':1}
    22  e = (1,2,3)
    23  ValidateTypes(((d, dict), (e, list)))

    代码通过验证,本来e是tuple,用来验证的类是list,应该抛错才对,因为15行那里用了return返回,所以后面的验证不再进行。

    修改后的函数如下:

     1 def ValidateTypes(vars_tpl):
     2   """Checks that each variable in a set of variables is the correct type.
     3 
     4   Args:
     5     vars_tpl: A tuple containing a set of variables to check.
     6 
     7   Raises:
     8     ValidationError: The given object was not one of the given accepted types.
     9   """
    10   if not isinstance(vars_tpl, tuple):
    11     raise ValidationError("vars_tpl argument must be tuple")
    12   for var, var_types in vars_tpl:
    13     if not isinstance(var_types, tuple):
    14       var_types = (var_types,)
    15     msg = ('The \'%s\' is of type %s, expecting one of %s.'
    16            % (var, type(var), var_types))
    17 
    18     for var_type in var_types:
    19       if not isinstance(var, var_type):
    20         raise ValidationError(msg)

    能正确地抛出异常:

    这个函数非常灵活,以后项目中能用上的地方非常多,呵呵~

  • 相关阅读:
    List<int>转化为逗号链接的字符串
    分页的总页数算法
    高性能SQLServer分页语句
    webconfig中的&符号问题解决
    检测SQLServer复制订阅进度
    jQuery自定义数组操作类(类似于List集合的增删改查)
    解决jquery绑定click事件出现点击一次执行两次问题
    IdentityServer4登陆中心
    AES加密解密通用版Object-C / C# / JAVA
    T-SQL 基本语法
  • 原文地址:https://www.cnblogs.com/bjdxy/p/2768464.html
Copyright © 2011-2022 走看看