Python语言进阶之流程控制和异常处理(4-1)

一、流程控制

流程控制是程序设计语言的重要功能之一,主要包括条件语句和循环语句两种。
条件语句:用于改变程序运行指令的先后顺序;
循环语句:将某段指令代码反复运行若干遍。

1、条件语句

条件语句根据条件判断表达式的值来决定后续运行程序的顺序。Python支持三种条件语句,分别为 if语句 、if…else…语句和 if…elif…else…语句

if 及其衍生的条件判断语句是目前各种高级程序设计语言的关键核心之一。

Python的 if 类条件判断语句与其他语言的不同之处主要有以下三点:
1)、条件表达式无须外加括号;
2)、条件表达式后需加冒号;
3)、条件表达式为True 时执行的语句不用加花括号 ”{}“ ,但需要遵循Python语法的缩进原则,使用缩进来划分语句块,相同缩进的语句在一起组成一个语句快。

1.1 if语句

主要语法如下所示:

if 条件表达式:
         语句体

如果条件表达式结果为 True ,则执行下一行缩进的语句体;若条件表达式计算结果为False ,则跳过该条语句继续向下执行,如下:

    if 2 > 1:
        print("True")      # True

1.2 if…else…语句 和 if…elif…else 语句

语法如下:

    if 条件表达式1:
        语句体1
    else:
        语句体2
........................................  
    if 条件表达式1:
        语句体1
    elif 条件表达式2:
        语句体2
    elif:
        ...
    else:
        语句体

当条件表达式1的结果为True时,执行语句体1;当条件表达式2的计算结果为True时,执行语句体2 ,若else之前的条件表达式计算结果均为 False ,则执行语句3,如下:

    a = 3
    b = 4
    if a > b:
        print("a > b")
    elif a == b:
        print("a == b")
    else:
        print("a < b")

结果:a < b

1.3 if 嵌套使用

    c = 2
    d = 4
    e = 5
    if c > d:
        print("c > d")
    elif c == d:
        print("c == d ")
    elif c < d:
        if d > e:
            print("c < d 且 d > e")
        elif d == e:
            print("d > c 且 d == e")
        else:
            print("d > c 且 d < e")
    else:
        print("未知")

结果:d > c 且 d < e
注:Python 没有 swich…case…语句

2、循环语句

在解决实际问题的过程中往往存在规律性的重复操作,因此在程序中需要重复执行某些语句。一组被重复执行的语句被称为循环体,循环的终止条件决定能否继续循环。Python 的循环语句主要有 while 和 for 两种没有 do…while…结构

2.1 while循环

主要语法如下:

    while 条件表达式:
        语句体

与 if 语句相似,while 循环的条件表达式也不需要括号,且表达式末尾必须添加冒号 。
当条件表达式计算结果为True 时,执行下一行缩进的语句,若条件表达式计算结果为 False ,则跳过该条语句继续向下执行,如下:

    n = 10
    m = 0
    i = 1
    while i <= n:
        m = m + i
        i+=1          # 等价与 i = i+1
    print("1 到 %d 之和为 :%d" % (n, m))    #  1 到 10 之和为:55

while 循环可以带有 else 子句,用于在条件表达式为 False 时执行相应的语句。如下:

    n = 10
    while n < 12:
        print(n, "小于12")
        n += 1
    else:
        print(n, "大于等于12")
    
   结果:
   10 小于12
   11 小于12
   12 大于等于12

可以通过设置条件表达式为恒等式来实现无限循环,如下:

    while 1 == 1:
        print(time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
结果如下:
2021-09-26 17:38:15
2021-09-26 17:38:15
2021-09-26 17:38:15
2021-09-26 17:38:15
2021-09-26 17:38:15
......

在命令窗口出现无限循环时可以按 ” Ctrl + C “ 中断循环,在Pycharm 工具上可以通过点击 绿色三角运行键 旁边的 红色四方形键 中断循环。

2.2 for循环

Python中的 for 循环可以遍历任何序列型的数据,包括列表[]、元组()、集合{}、字典{}和字符串。for 循环语法如下:

    for 变量 in 序列:
        语句体1
    else:
        语句体2
    # 定义一个列表
    languages = ['C++', 'Java', 'Python']

    # 遍历字符串列表
    for x in languages:
        print(x)          # C++  Java   Python

    # 使用 range() 函数,可以指定循环数
    for i in range(4):
        print(i)          # 0  1  2  3

    # 也可以结合 range() 函数和 len() 函数遍历一个字符串列表,例如:
    for j in range(len(languages)):
        print(j, languages[j])       
    # 结果为:
    0 C++     
    1 Java     
    2 Python

2.3 break、continue、pass

1)、break 语句可以跳出 for 和 while 循环过程,跳出后对应的 else 部分将不再执行,如下:

    for i in 'Latter':
        if i == 'e':
            break
        print('当前字母为:', i)
    
    结果如下:
    当前字母为: L
    当前字母为: a
    当前字母为: t
    当前字母为: t

2)、continue 语句用于跳过 for 循环和 while 循环中的本次循环,其后的语句在本次循环中将不再执行,同时程序将执行下一轮循环,如下:

    for j in range(4):
        if j == 2:
            continue
        print(j)        # 0  1  3

3)、pass语句主要用于占位,如下:

    for latter in 'latter':
        if latter == 'e':
            pass
            print('执行pass语句')
        print('当前字母为:', latter)
    结果为:
    当前字母为: l
    当前字母为: a
    当前字母为: t
    当前字母为: t
   执行pass语句
   当前字母为: e
   当前字母为: r
    for j in 'qwer':
        if j == 'e':
            pass
            print("执行pass语句")
        print("当前字母为:",j)
    结果为:
    当前字母为: q
    当前字母为: w
    执行pass语句
    当前字母为: e
    当前字母为: r

二、异常处理

异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的超出程序正常执行流程的状况。”异常(Exception)“ 描述的是一种数据结构,可以存储与某种异常情况相关的信息。抛出是用来移交控制权的机制,抛出异常也可以称为引发异常。异常抛出后,控制权会查找对应的捕获机制并进一步处理。错误(Error)常用来表示系统级错误或底层资源错误

在Python中,二者具有相同的处理机制。

编程过程中,一般很难将所有的异常状况都处理得当,通常异常捕获可以针对突发事件做集中处理,从而保证程序的稳定性。

Python 中使用 try…except…else…finally… 语句检查可能发生异常的代码,捕获异常并进一步处理(finally代码块,无论执行的代码是否有异常,最后都是会执行的代码),其语法如下:

    try:
        尝试执行的代码
    except 错误类型1:
        针对错误类型1,对应的代码处理
    except 错误类型2:
        针对错误类型2,对应的代码处理
    except (错误类型3, 错误类型4):
        针对错误类型3和4,对应的代码处理
    except Exception as result:
        打印错误信息
    else:
        没有异常才会执行的代码
    finally:
        无论是否有异常,都会执行的代码
    try:
        num = int(input("请输入一个整数:"))
        res = 10/num
        print(res)
    except ValueError:
        print('请输入一个整数')
    except ZeroDivisionError:
        print('除0错误,请输入一个非0整数')
    except Exception as res:
        print('未知错误 %s' % res)
    else:
        print('正常执行')
    finally:
        print('执行完成')

结果:
请输入一个整数:5
2.0
正常执行
执行完成

请输入一个整数:2.5
请输入一个整数
执行完成

请输入一个整数:0
除0错误,请输入一个非0整数
执行完成

请输入一个整数:a
请输入一个整数
执行完成

可以看到,程序根据用户的不同输入执行了不同的异常处理分支代码块,并在最后执行了finally 代码快。一般而言,当函数或方法执行出现异常时,会将异常传递给函数或方法的调用方,若逐级传递到主程序仍然没有对应的异常处理代码块,程序才会被终止。因此可以在主函数中适当增加异常捕获代码。

除代码执行自动抛出异常外,编程者也可以根据程序的业务功能需求,主动地抛出异常,这种情况下可以使用 raise 语句,例如:

    try:
        raise Exception
    except Exception:
        print("This is an Exception")

Python 还支持断言语法。在一套程序完成之前,编程者并不知道程序会在哪里报错,或时触发何种条件报错,使用断言语法可以有效地进行异常检测,并适时触发和抛出异常。使用 assert 语句声明断言,其语法如下:

    assert 表达式[, "断言异常提示信息"]

Python 首先检测表达式结果是否为 True ,若为 True 则继续向下执行,否则触发断言异常,并显示断言异常提示消息,后续代码捕获该异常并进一步处理。可以使用 try…except 代码块来捕获和处理异常,将可能出现异常的代码放在 try 语句体中,如果运行过程中发生异常则会被成功捕获,如下:

    def testAssert(x):
        assert x < 1, '无效值'
        print('有效值')
    try:
        testAssert(0)
    except Exception:
        print('捕获成功')
结果:
有效值

    def testAssert(x):
        assert x < 1, '无效值'
        print('有效值')
    try:
        testAssert(2)
    except Exception:
        print('捕获成功')
结果:
捕获成功
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值