如果是TypeError,则返回False

时间:2017-02-20 09:41:26

标签: python error-handling exception-handling

我创建了一个python函数:

def is_cayley_table(table):
    try:
        if type(table) is not list:
            return False
        else:
            n = len(table)
            poss_values = range(0,n)
            for i in range(0,n):
                if len(table[i]) != n:
                    return False
            for j in range(0,n):
                if type(table[i][j]) is int and table[i][j] in poss_values:
                    return True
                else:
                    return False
    except TypeError:
        return False

然后我用INVALID参数调用该函数:

is_cayley_table([1, 1, 0], [0, 1, 2], [1, 2, 2])

我希望函数返回" False",但此刻我得到了这个:

 File "C:/Users/Jack/OneDrive/Documents/comp_project.py", line 27, in <module>
    is_cayley_table([1, 1, 0], [0, 1, 2], [1, 2, 2])

TypeError: is_cayley_table() takes 1 positional argument but 3 were given

如果有人可以提供帮助,我将非常感激。

杰克

2 个答案:

答案 0 :(得分:1)

你正在捕捉函数中的类型错误,但问题在于调用函数;这不能在函数本身内捕获。

我不确定为什么你需要能够使用无效参数调用该函数,但支持这种方法的一种方法是接受任何带有*args语法的参数,然后检查你拥有的内容: / p>

def is_cayley_table(*args):
    if len(args) != 1:
        return False
    table = args[0]
    ...

答案 1 :(得分:0)

首先,你不能提供一个参数多于声明参数的函数。这是最大的问题。

因此,如果你为函数提供了1个参数,你可以输入类似

的内容
is_cayley_table(([1, 1, 0], [0, 1, 2], [1, 2, 2]))

它将按预期工作