如何传递“随机”数量的变量并非所有变量都存在

时间:2016-12-15 18:17:08

标签: python

我有一个验证输入的方法:

def validate_user_input(*args):
    for item in args:
        if not re.match('^[a-zA-Z0-9_-]+$', item):

我这样称呼它:

validate_user_input(var1, var2, ..., var7)

但这些是从用户输入生成的,其中一些可能会丢失。如果没有创建大量的if语句,那么这样做的正确方法是什么?

变量是从像这样的json输入中分配的,而json输入可能没有一些所需的属性:

var1 = request.json.get('var1')

我认为他们是<class 'NoneType'>

这是错误:TypeError: expected string or buffer

3 个答案:

答案 0 :(得分:1)

如果你的request.json对象是dict或dict,你只需将默认值作为第二个参数传递给get

答案 1 :(得分:1)

如果我理解正确,您将var_生成request.json.get('var_')个变量,这些变量将返回您要验证的字符串,如果字段丢失则返回None

如果是这种情况,那么您只需向validate_user_input添加一个None值的特殊情况:

def validate_user_input(*args):
    for item in args:
        if item is None:
            continue #this is acceptable, don't do anything with it
        elif not re.match('^[a-zA-Z0-9_-]+$', item):
            ...

或者将您感兴趣的所有值存储在字典中可能更有意义:

wanted_keys = {'var1','var2','var3'}
  ## set intersection works in python3
present_keys = wanted_keys & response.json.keys() 
  ## or for python 2 use a basic list comp
#present_keys = [key for key in response.json.keys() if key in wanted_keys] 
actual_data = {key: response.json[key] for key in present_keys}

然后你将actual_data.values()作为参数列表传递给validate_user_input。

答案 2 :(得分:-1)

如果在调用var时某些validate_user_input - 变量确实可能是未定义的,为什么不将它们全部初始化(例如,到空字符串'',以便正则表达式失败)在实际定义它们之前?