我尝试实现一个装饰器函数来净化mongoDB
的参数,这是我目前所做的:
def sanitize(function_to_decorate):
def wrapper(*args):
for query in args:
if any(elem in r'${/}\\' for elem in query):
raise Exception('String contains invalid characters')
function_to_decorate(*args)
return wrapper
@sanitize
def test(arg, arg2, list):
print (arg, arg2, list)
test('Hi', 'Me', '1') # Passes
test('Hi', 'Me', '{1') # Fails
test('Hi', 'Hey', ['Me', '{1']) # Passes
这是有意义的,因为我只对所有参数迭代一次,但由于一些函数可能需要列表作为参数(比如,对于$in检查),这并不是普遍有用的。
如何深入查看列表中任意数量的列表?
def a(str, str, [] )
def b([], [] ,[])
我也不知道如何为关键字参数实现这一点,但这是装饰器特有的问题。
1条答案
按热度按时间ftf50wuq1#
你可以把检测参数的责任交给一个递归检查参数的函数:
现在,您的最终测试用例将正确地失败: