字典——缺失的键: if 测试

未匹配的标注

作为映射,字典只支持通过键访问项,使用刚才看到的那种操作。另外,它们还使用在许多日常用例中非常有用的方法调用来支持类型特定的操作。比如,虽然可以赋给一个新键来扩展字典,但获取一个不存在的键仍是一个错误:

>>> D = {'a': 1, 'b': 2, 'c': 3}
>>> D
{'a': 1, 'c': 3, 'b': 2}
>>> D['e'] = 99 # 赋给新键让字典增长
>>> D
{'a': 1, 'c': 3, 'b': 2, 'e': 99}
>>> D['f'] # 引用一个不存在的键是一个错误:
...错误文字省略...
KeyError: 'f'

这是想要的——获取某个并不真的存在的东西通常是一个编程错误。但在一些通用程序中,当编写代码时,并不能总是知道什么键将会出现。如何处理这种情况并避免错误呢?一个解法是提前测试。字典的 in 成员表达式允许查询结果上的键是否存在,并使用Python的if语句来根据 if表达式的结果来决定代码的分支。在下面的操作中,输入代码后,确保按Enter两次来交互地运行这个if(如在第3章中解释的,在交互式提示符,一个空行意外着“开始”),且就像对之前的多行字典和列表一样,提示符的第2行及之后的行在一些界面上变为“...”:

>>> 'f' in D
False
>>> if not 'f' in D: # if是Python中唯一的选择语句
                print('missing')

missing

本书后面章节还会对if语句进行更多阐述,但正在使用的形式是很容易理解的:它包含单词 if,跟着一个被解释为真或假的结果的表达式,跟着一个如果测试为真就会运行的代码块。在它的完整形式中,if语句还可以有一个else语句作为默认情况,和一个或更多elif(“else if”)从句作为其他测试。它是Python中的主要选择语句工具;连同它的三元 if/else 表达式表兄弟(将稍后学习)和之前看到的 if 理解过滤器类似物,这是在脚本中对选择和决策的逻辑进行编码的方式。

如果过去你已经使用过其他一些编程语言,可能想知道Python如何知道什么时候 if 语句终止的。后面章节将深入解释Python的语法规则,但简而言之,如果有多余一个动作要在一个语句块中运行,用同样的方式简单地将它们都缩进——这不仅鼓励了可读性高的代码,还减少了必须输入的字符数(不用输入大括号):

>>> if not 'f' in D:
      print('missing')
      print('no, really...') # 语句块被缩进

missing
no, really...

除了 in 测试,还有许多方式避免访问创建的字典中不存在的键:get方法,一个带默认值的条件索引;Python 2.X中的 has_key 方法(一个在3.X中不再可用的 in 的类似函数);try语句(一个将首先在第10章中见到的工具)它完全地捕获异常和从异常中恢复;并且 if/else 三元(三部分)表达式,它本质上是一个 if 语句被压缩为一个单行。下面是一些例子:

>>> value = D.get('x', 0) # 索引但有一个默认值
>>> value
0
>>> value = D['x'] if 'x' in D else 0 # if/else 表达式形式
>>> value
0

直到后面的一个章节,这些可选方法都不会被详述。现在让我们看一下在一个常见用例中另一个字典方法的作用。

本文章首发在 LearnKu.com 网站上。

上一篇 下一篇
讨论数量: 0
发起讨论 只看当前版本


暂无话题~