我什么时候应该在 python 中引发 LookupError ?

Vel*_*ron 9 python lookup exception keyerror

Python 的内置异常文档定义LookupError为:

当映射或序列上使用的键或索引无效时引发的异常的基类:IndexError、KeyError。这可以通过 codecs.lookup() 直接引发。

这个基类应该只在捕获使用索引和键访问字典的尝试部分时使用,当一个人想要速记捕获两者时,还是有另一种情况下你会使用它?

小智 5

首先,字典仅使用键(请参阅:如何索引字典?)。

如果你是一个懒惰的人,你会用 LookupError 来捕获 KeyError 和 IndexError (以免说你有一本充满列表的字典)。尽管如此,我还是更愿意分别捕获它们,并有两个不同的例外。例如:

try:
    # do some stuff here
except KeyError:
    # key error handling
except IndexError:
    # index error handling
Run Code Online (Sandbox Code Playgroud)

这样您就可以以不同的方式响应这些异常,因为它们是由不同的事件引起的。此外,可能还有其他异常是 LookupError 的一种变体(见下文),并且您也不希望捕获这些异常(与不简单使用的原因相同except:)。

使用 LookupError 的另一种方法可能是您需要自己的异常,因为此异常表示的错误既不是由 KeyError 也不是 IndexError 描述的,而是一种 LookupError 类型。在这种情况下,您的自定义异常可以继承自 LookupError。

  • @VeltzerDoron 我已经看到 `LookupError` 与 set 方法 `pop()` 一起使用了很多次。我认为这是一个很好的例子,因为虽然如果集合为空,“pop()”会引发“KeyError”,但我认为“LookupError”更适合这里,因为“pop()”从集合中删除随机元素,并且需要无参数。通常,当您听到“KeyError”时,首先想到的是作为参数传入的键不存在,但这里的情况并非如此。 (2认同)