【发布时间】:2020-07-07 08:37:26
【问题描述】:
我正在编写一个检查数据文件格式(如 csv)的脚本
我对每个字段应用各种规则:最大长度、空字段、值边界、正则表达式匹配(检查有效电子邮件)等...
字典中的这些规则(每个 collum 都有一个):
#column 1 : integer from 1 to 99, except 10
{
"minval":1,
"forbiddenvals": [10,15],
"maxval":100
}
我的函数定义如下:
def vercol(data,
empty=False,isadate = None,
minlen=None,maxlen=None,
minval=None,maxval=None,
allowedvals=[],forbiddenvals=[],
regex =None):
"""
Verify if the field 'data' checks the rules
Parameters /Rules
----------
empty : Boolean, optional
set to True if empty field is accepted. The default is False.
minlen : integer, optional
If set, minimum length for the field.
maxlen : integer, optional
If set, maximum length for the field.
forbidenvals : List, optional
List of rejected values.
(...)
Returns
-------
True if all the rules are met.
"xError" if a test failled, where x depend of the wich test failed FIRST
"""
if data == "":
return True if empty else "EmptyFieldError"
if minlen and len(data) < int(minlen):
return "MinLengthError"
....
other rules
....
return True
正常调用参数时,函数运行不正常:
我想做的是像这样传递字典:
rules = {
"minval":1,
"forbiddenvals": [10,15],
"maxval":100
}
result = vercol(field, rules)
#foo
问题:它不起作用,尽管在字典中,参数只使用它们的默认值。
#works fine
vercol('abcdefghi', maxlen=4) #return "MaxLenError"
vercol('', maxlen=4) #return "EmptyFieldError"
vercol('', empty=True) #return True
#problem
rule = {"maxlen":4,"empty":False}
vercol('',rule) #retuns True , expected : "EmptyFieldError"
vercol('abcdefgh',rule) #retuns True , expected : "MaxLenError"
有什么线索可以解决这个问题吗?
【问题讨论】:
-
result = vercol(field, **rules) -
好的,谢谢蒂埃里。我强硬的 * 和 ** 说明符仅适用于函数定义。
标签: python dictionary parameter-passing