使用列表推导和异常?
好吧,假设我有一个列表,我想检查这个列表是否在另一个列表中存在。我可以这样做:
all(value in some_map for value in required_values)
这个方法很好用,但假设我想在缺少必要值的时候抛出一个异常,并且想知道缺少的具体值是什么。我该如何使用列表推导来实现呢?
我只是有点好奇,所有的迹象都指向“不可以”。
编辑 哎,我是想说这个:
for value in required_values:
if value not in some_map:
raise somecustomException(value)
看了这些,我看不出我怎么能找到出错的值。
7 个回答
2
如果你不想考虑重复的值,并且这些值可以被哈希(也就是可以唯一标识),那么可以使用集合(sets)。集合更简单、更快,而且可以一次性提取出“所有”缺失的元素:
required_values = set('abc') # store this as a set from the beginning
values = set('ab')
missing = required_values - values
if missing:
raise SomeException('The values %r are not in %r' %
(missing, required_values))
2
在列表推导式中,你不能使用raise这个命令。你可以自己去查一下,看看Python语言参考手册里的语法。
不过,你可以调用一个函数,让它帮你抛出异常。
14
假设我想在缺少必要值的时候抛出一个异常,并且想要知道缺少的是什么值。我该怎么用列表推导式来实现呢?
列表推导式是一种简洁的语法,用来根据已有的列表创建新列表。它并不是用来把任何的 for
循环都写成一行的通用方法。在这个例子中,你实际上并没有在创建一个列表,所以用列表推导式就没有意义了。