【问题标题】:Problem with validation of schema in pythonpython中模式验证的问题
【发布时间】:2019-04-13 00:32:14
【问题描述】:

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

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

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

【问题讨论】:

标签: python


【解决方案1】:

问题是,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

【讨论】:

  • 谢谢,我更正了这个问题。在我的脚本中,我编写了 type(dict()) 和 type(list()) ,它们可以根据需要评估类型。问题仍然存在于如何以更通用/优雅/可读的方式编写..
猜你喜欢
  • 2019-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 2018-03-12
  • 1970-01-01
  • 2014-04-01
  • 1970-01-01
相关资源
最近更新 更多