在python中验证模式的问题

时间:2018-11-09 12:26:54

标签: python

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

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

mylist = [{'a': 1, 'b': 2}, {'c': 3},{'d': 4}]
mylist1 = [[{'a':1}, {'ccc':4}], [{'e': 3}]]

但是,例如,以下应该引发错误:

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')

我尝试使用架构验证,但似乎不知道该怎么做。 任何帮助使它更具可读性/优雅的方法将不胜感激!

先谢谢您

M

1 个答案:

答案 0 :(得分:2)

问题是,type(dict)的计算结果为type,因为dict已经是类型指定。

因此,您需要将if set([type(x) for x in mylist]) == set([type(dict)])更改为if set([type(x) for x in mylist]) == set([dict])

此外,抛出一般Exception也不是一个好主意,例如对这种类型的异常使用TypeError