检查Python中的类型为通配符

时间:2012-03-27 06:54:28

标签: python types

通常情况下,类型检查在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?

1 个答案:

答案 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])