当前位置: 首页 > 面试题库 >

`if key in dict` vs.`try / except`-哪个更易读?

贝德辉
2023-03-14
问题内容

我有一个关于成语和可读性的问题,对于这种特殊情况,似乎存在Python哲学的冲突:

我想从字典B构建字典A。如果B中不存在特定键,则什么也不做,继续。

哪种方法更好?

try:
    A["blah"] = B["blah"]
except KeyError:
    pass

要么

if "blah" in B:
    A["blah"] = B["blah"]

“做并请求宽恕”与“简单明了”。

哪个更好?为什么?


问题答案:

异常不是有条件的。

条件版本更清晰。这很自然:这是直接的流控制,这是条件设计的目的,而不是异常。

在循环中进行这些查找时,异常版本主要用作优化:对于某些算法,它允许从内部循环中消除测试。这里没有那个好处。它有一个小的优势,它避免了重复说"blah"两次,但是如果您要进行很多次操作,您可能应该仍然具有帮助move_key功能。

通常,除非您有特殊原因,否则我强烈建议您默认使用条件版本。有条件的是执行此操作的 明显 方法,通常强烈建议您优先使用一种解决方案。



 类似资料:
  • 主要内容:获取特定异常的有关信息Python 中,用 语句块捕获并处理异常,其基本语法结构如下所示: try:     可能产生异常的代码块 except [ (Error1, Error2, ... ) [as e] ]:     处理异常的代码块1 except [ (Error3, Error4, ... ) [as e] ]:     处理异常的代码块2 except  [Exception]:     处理其它异常 该

  • 问题内容: 以下三个功能中哪个更有效? 请以可接受的具体逻辑答复。 问题答案: 前者是更有效时,是。两者何时不相同。与的比较只是两个32位整数的比较,这是非常快速的运算。抛出异常的代价很高,因为应该创建新对象并且应该填充堆栈跟踪。 三进制运算符与语句完全一样有效,因为两者都被转换为相同的字节码。

  • Python 异常处理机制还提供了一个 finally 语句,通常用来为 try 块中的程序做扫尾清理工作。 注意,和 else 语句不同,finally 只要求和 try 搭配使用,而至于该结构中是否包含 except 以及 else,对于 finally 不是必须的(else 必须和 try except 搭配使用)。 在整个异常处理机制中, finally 语句的功能是:无论 try 块是否

  • 在原本的 结构的基础上, Python 异常处理机制还提供了一个 else 块,也就是原有 try except 语句的基础上再添加一个 else 块,即 结构。 使用 else 包裹的代码,只有当 try 块没有捕获到任何异常时,才会得到执行;反之,如果 try 块捕获到异常,即便调用对应的 except 处理完异常,else 块中的代码也不会得到执行。 举个例子: 可以看到,在原有 try e

  • 我们尝试读取用户的一段输入。按Ctrl-d,看一下会发生什么。 >>> s = raw_input('Enter something --> ') Enter something --> Traceback (most recent call last):   File "<stdin>", line 1, in ? EOFError Python引发了一个称为EOFError的错误,这个错误基本

  • 我决定找出Protobuf、Flatbuffers和Cap'n proto中的哪一个是我的应用程序最好/最快的序列化。在我的例子中,通过网络发送某种字节/字符数组(这就是我序列化为这种格式的原因)。因此,我对这三种方法都做了简单的实现,其中我对字符串、浮点和int进行了sealize和dezeralize。这带来了意想不到的结果:Protobuf是最快的。我会说他们出人意料,因为cap'n pro