通常情况下,类型检查在Python中是不受欢迎的,并且有充分理由 - 如果您的代码设计得很好,您应该知道正在向您的函数传递什么类型的数据。
但是,我正在处理实现一种旧的编程语言,其中一部分涉及输入验证和兼容性方面的一些独特挑战。
这是一个函数,用于在实际运行函数之前进行一些基本类型检查:
def argcheck(stack, funcname, arglist, exceptlist):
"""This function checks if arguments are valid and then passes back a list of them in order if they are.
stack should contain the stack.
funcname should contain the display name of the function for the exception.
arglist should contain a list of lists of valid types to be checked against.
exceptlist contains the information the exception should contain if the item does not match."""
returnlist=[]
count=0
for xtype in arglist:
if stack[-1] in xtype:
returnlist.append(stack[-1])
stack.pop()
else:
raise Exception(funcname, exceptlist[count])
偶尔,我需要一些东西来匹配任何类型。如何创建所有类型的列表,或者将项目放在列表中,如果有任何尝试与之匹配,则返回true?
答案 0 :(得分:1)
使用空列表匹配任何类型,如果True
为空,则将匹配条件更改为xtype
:
def argcheck(stack, funcname, arglist, exceptlist):
returnlist=[]
count=0
for xtype in arglist:
if not xtype or stack[-1] in xtype:
returnlist.append(stack[-1])
stack.pop()
else:
raise Exception(funcname, exceptlist[count])