Python 基础教程

Python 高级教程

Python 相关应用

Python 笔记

Python else 关键字

Python 关键字 Python 关键字


else不是独立语句,需要和其他语句搭配使用,有两大种用法,一是和if一起使用,作为条件语句的子句;另一个是和for、while或try语句搭配使用,循环或逻辑非正常完成时,else语句块才被执行。

条件语句子句

else作为if条件语句的子句时,比较简单,形式如下:

if condition1:
    do something1
elif condition2:
    do something2
elif condition3:
    do something3
else:
    do something4

当condition1、condition2、condition3条件都不满足时,执行else子句。

循环语句中else使用

Python中的for、while循环都有一个可选的else分支,在循环迭代正常完成之后执行。换句话说,如果循环以break语句或者return语句退出循环,else分支代码将不会执行

示例如下:

def bk():
    for k in range(3):
        if k == 1:
            break
        print(k)
    else:
        print('iterated over everything')


def rt():
    for i in range(3):
        print(i)
        return
    else:
        print('iterated over everything')


for j in range(3):
    print(j)
else:
    print('iterated over everything')
print('==========')
bk()
print('==========')
rt()

代码执行后,输出如下:

0
1
2
iterated over everything
==========
0
==========
0

上面代码的第一个循环中,我们在range(3)上迭代并打印每个数字。因为我们让循环正常完成,所以else分支也被执行;第二个bk函数中的循环,因为k=1时,执行了break跳出循环语句,所以else分支没有被执行;第三个rt函数中的循环,因为直接打印第一个数后return了,所以else分支也没有被执行。

同样不要忘记,以上所有也适用于while ... else ... 语句,如下:

i = 0
while i <= 2:
    print(i)
    i += 1
else:
    print('iterated over everything')
print('--------------')
j = 0
while True:
    if j > 2:
        break
    print(j)
    j += 1
else:
    print('iterated over everything')

代码执行后,输出结果为:

0
1
2
iterated over everything
--------------
0
1
2

else语句在循环中的一个常见使用案例是实现循环查找。假说你在查找一个满足特定条件的项目,同时需要进行附加处理,或者在未发现可接受的值时生成一个错误:

for x in data:
    if meets_condition(x):
        break
else:
    # raise error or do additional processing

没有else语句的话,你需要设置一个标志,然后在后面对其检测,以此确定是否存在满足条件的值:

condition_is_met = False
for x in data:
    if meets_condition(x):
        condition_is_met = True
 
if not condition_is_met:
    # raise error or do additional processing

这不是一个真正重要的东西,而在许多其他语言中你必须要如此做。但是类似Python的许多其他特性,else语句可以生成更加优雅的Python风格的(Pythonic)代码。毫无疑问,上面的例子中,使用else语句使得代码更加友好。这并不是说你不得不在循环中使用else语句,你总是可以使用标志等等。但是else语句常常可以使代码更加优雅、更具可读性。

try ... except ... else ... 的使用

与其他语言相同,在Python中,try ... except ... 语句主要是用于处理程序正常执行过程中出现的一些异常情况。在编程实践中通常可以把else和它们一起组合使用,形式如下:

try:
    normal execution block
except A:
    exception A handle
except B:
    exception B handle
except:
    other exception handle
else:
    if no exception,get here
finally:
    do final handle

上述语句的执行顺序如下:

  1. 正常执行的程序在try下面的normal execution block执行块中执行,在执行过程中如果发生了异常,则中断当前在Normal execution block中的执行跳转到对应的异常处理块中开始执行;
  2. python从第一个except X处开始查找,如果找到了对应的exception类型,则进入其提供的exception handle中进行处理,如果没有找到,则直接进入except块处进行处理。except块是可选项,如果没有提供,该exception将会被提交给python进行默认处理,处理方式则是终止应用程序并打印提示信息;
  3. 如果在normal execution block执行块中执行过程中没有发生任何异常,则在执行完Normal execution block后会进入else执行块中(如果存在的话)执行;
  4. 无论是否发生了异常,只要提供了finally语句,以上try/except/else/finally代码块执行的最后一步总是执行finally所对应的代码块;