如何在Python中获取点类型列表

3

我有一个类需要拥有一个变量,它是一个包含点的列表,表示形状中的顶点。

我按如下方式写一个点:a = [x, y]

那么点的列表应该是list(list)吗?

这是我的顶点设置器:

def set_vertices(self, vertices):
    if not isinstance(vertices, list(list)):
        raise TypeError("vertices must be list of points")
    self.__vertices = vertices

但是PyCharm告诉我,list(list)应该被替换为:"Union[type, tuple]"

而这段代码:

f = Figure(self.position);
f.set_vertices([[2, 2], [2, 2], [2, 2], [2, -2]])

引发异常:TypeError:'type' object is not iterable

该错误通常是因为您尝试迭代一个不可迭代的对象,例如整数或类。请确保您正在尝试迭代正确的对象,并使用适当的循环语句(如for循环)进行迭代。
1个回答

1
这是因为在Python中list(list)不是有效的类型,我们必须找到一种不同的方法来检查vertices是否属于所需类型——即列表的列表。这个怎么样?
if not isinstance(vertices, list) or not all(isinstance(v, list) for v in vertices):
    raise TypeError("vertices must be list of points")

此外,考虑一下空列表是否是您的用例中有效的输入,并且是否要检查每个点是否具有正好两个整数坐标。但最重要的是,仔细思考为什么要这样检查输入类型。Python是一种动态类型语言,手动检查输入是否符合预期类型在其他语言中并没有太多意义;如果输入类型有任何错误,它将在运行时引发错误,这很好 - 这适用于类型检查,也适用于请求原谅而不是许可。easier to ask for forgiveness than permission

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接