在一种情况下引发异常是 非常有意义的区别 。如果尝试从不存在的集合中删除某个元素会出现错误,则最好使用set.remove()
而不是set.discard()
。
这两种方法在实现上是相同的,只不过与set_discard()
该set_remove()
函数相比增加了以下几行:
if (rv == DISCARD_NOTFOUND) {
set_key_error(key);
return NULL;
}
这引起了KeyError
。由于这是稍微更多的工作,set.remove()
是一个 teeniest 分数越慢; 在返回之前,您的cpu必须进行一项额外的测试。但是,如果您的算法 依赖于异常, 则额外的分支测试几乎无关紧要。