对于我的脚本,我需要检查某个对象是词典列表还是词典列表,以便执行相应的操作,否则会引发错误。
更具体地说,应接受以下条件(有两个不同的条件):
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
答案 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