使用列表推导和异常?

4 投票
7 回答
2400 浏览
提问于 2025-04-15 12:00

好吧,假设我有一个列表,我想检查这个列表是否在另一个列表中存在。我可以这样做:

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 循环都写成一行的通用方法。在这个例子中,你实际上并没有在创建一个列表,所以用列表推导式就没有意义了。

撰写回答