我有一个验证输入的方法:
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
答案 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
- 变量确实可能是未定义的,为什么不将它们全部初始化(例如,到空字符串''
,以便正则表达式失败)在实际定义它们之前?