
1.3.1 条件语句
条件语句通过一个或多个布尔表达式的执行结果(真值或假值)决定下一步的执行方向。在Python中,实现选择结构最普遍的工具是if语句。此外,try语句专门用于异常处理,其内在逻辑也符合选择结构。
1.if、elif与else
if语句中包含3种条件判断句式,即if、elif和else,其中,if与elif部分都包含判断条件,当判断条件都不成立时,程序才能执行else部分的代码。
if语句最基础的形式是if-else,if-else语句的形式很简单,通过条件判断的结果即可决定下一步的执行方向,具有两条分支。实际工作中,需要用到的条件分支数目可能多到难以想象,需要扩展if语句的分支,使用elif可实现简洁、减少过分缩排的效果。由于if-elif-else语句提供了更多条件分支,因此被普遍使用,其基本语法格式如下。
if条件表达式1: 操作语句1 elif条件表达式2: 操作语句2 else: 操作语句3
if-elif-else语句常用的参数及说明如表1-30所示。
表1-30 if-elif-else语句常用的参数及说明

该语句执行时,按照从上到下的顺序依次检查每个条件表达式返回值的情况,任何一个条件表达式只要返回真值,就执行该表达式下面的操作语句,若所有条件表达式都返回假值,则执行else下面的操作语句。if-elif-else语句相对于if-else语句优势明显,可以实现更为复杂的功能。例如,使用if-elif-else语句实现年龄段的判断,示例如代码1-1所示。
代码1-1 使用if-elif-else语句实现年龄段的判断示例

代码1-1通过比较运算符实现了年龄段划分,并能区分年龄段界限,避免逻辑出错。
if语句支持嵌套,即在一个if语句中嵌入另一个if语句,从而构成不同层次的选择结构。嵌套的意义在于实现多层选择结构,使用嵌套对条件语句的功能有升华作用,这与elif是相似的,elif能对有限的条件分支进行扩展,嵌套则提供了建立多层选择结构的工具,两者分别在不同的维度上提升了if语句的功能性。使用嵌套需要以不同的缩进长度划分代码结构的层次,因此嵌套时要特别注意缩进的规范性。使用if语句时,需要注意以下几点。
(1)条件判断语句应尽量简单,若语句复杂,则应当将运算先放到一个变量中。
(2)Python的条件语句中允许使用常用的数值比较运算(==,!=,>,>=,<,<=)。
(3)Python允许无限次if语句嵌套,但在实际编程中,如果必须用到3到4级嵌套,则建议考虑用其他方法编写代码,因为嵌套超过两层会使程序的运行效率大打折扣。
2.try、except与else
Python使用try语句处理异常,该语句一般包括try、except和else 3个句式,组成try-except-else的形式。try语句可以视为一种条件分支,与if语句的区别是,try语句并不包含条件判断式,执行的流向也不取决于条件表达式,而依赖于代码块能否执行。其内在逻辑和运行流程与if语句是相似的,符合条件分支的特征,其基本语法格式如下。
try: 操作语句1 except错误类型1: 操作语句2 except错误类型2: 操作语句3 else: 操作语句4
try-except-else语句的参数及说明如表1-31所示。
表1-31 try-except-else语句的参数及说明

在try语句中,except与else代码块都是可选的。except代码块可以有0个或多个;else代码块可以有0个或1个。但要注意,else语句的存在必须以except语句的存在为前提,在没有except语句的try语句中使用else语句会引发语法错误。使用多个except代码块时,必须坚持对其进行规范排序,即从最具针对性的异常到最通用的异常。
除自然发生的异常外,Python中的raise语句可用于故意引发异常,用于在指定条件下抛出异常。使用该语句引发异常时,只需在raise后输入异常名即可,如代码1-2所示。
代码1-2 使用raise语句引发异常示例
