python中模式验证的问题

python中模式验证的问题,python,Python,对于我的脚本,我需要检查某个对象是词汇表列表还是词汇表列表,以便执行相应的操作,否则会引发错误 更具体地说,应接受以下条件(有两个不同的条件): 但是,例如,以下内容应引起错误: c = [[]] d = [[{'a':1}], {'b':2}] 我实施了一个简单的解决方案,如下所示: if set([type(x) for x in mylist]) == set([dict]): print('first case') elif set([type(x) for x in myli

对于我的脚本,我需要检查某个对象是词汇表列表还是词汇表列表,以便执行相应的操作,否则会引发错误

更具体地说,应接受以下条件(有两个不同的条件):

但是,例如,以下内容应引起错误:

c = [[]]
d = [[{'a':1}], {'b':2}]
我实施了一个简单的解决方案,如下所示:

if set([type(x) for x in mylist]) == set([dict]):
    print('first case')
elif set([type(x) for x in mylist]) == set([list]) and set([type(x) for y in mylist for x in y ])== set([dict]):
    print('second case')
else:
    raise Exception('wrong structure')
我尝试使用模式验证,但似乎不知道如何做到这一点。 如有任何帮助使本文件更具可读性/优雅性,将不胜感激

提前感谢大家,


问题是,
type(dict)
评估为
type
因为
dict
已经是类型指定

因此,您需要将
if set([type(x)表示mylist中的x])==set([type(dict)])
更改为
if set([type(x)表示mylist中的x])==set([dict])


此外,抛出常规的
异常
也不是一个好主意,您可以,例如,使用
TypeError
处理此类异常

查看感谢您的评论。问题是,我需要更一般地说:我不知道关键点,也不知道我的结构中的元素数量。谢谢,我更正了这个问题。在我的脚本中,我编写了type(dict())和type(list()),它们根据需要计算类型。问题在于如何以更通用/优雅/可读的方式写作。。
if set([type(x) for x in mylist]) == set([dict]):
    print('first case')
elif set([type(x) for x in mylist]) == set([list]) and set([type(x) for y in mylist for x in y ])== set([dict]):
    print('second case')
else:
    raise Exception('wrong structure')