• Python的异常处理机制 ​


    在这里插入图片描述

    🤵‍♂️ 个人主页: @Flyme awei 个主页
    👨‍💻 作者简介:Python领域新星创作者。
    🐋 希望大家多多支持😘一起进步呀!
    📝 如果文章对你有帮助的话,欢迎评论💬点赞👍收藏📂加关注

    前言

      今天是《CSDN21天学习挑战赛》的第15天
      昨天学习了Python基础——函数和代码的复用
      今天将学习Python的异常处理机制

    活动地址:CSDN21天学习挑战赛

    Python异常处理机制

      Python程序一般对输入有一定要求,但当实际输入不满足程序要求时,可能会产生程序的运行错误。

    一、Bub的由来及分类

    1.Bug的由来

      世界上第一部万用计算机的进化版-马克2号(Mark II)

      1945年9月9日,下午三点。哈珀中尉正领着她的小组构造一个称为“马克二型”的计算机。这还不是一个完全的电子计算机,它使用了大量的继电器,一种电子机械装置。第二次世界大战还没有结束。哈珀的小组日以继夜地工作。机房是一间第一次世界大战时建造的老建筑。那是一个炎热的夏天,房间没有空调,所有窗户都敞开散热。

      突然,马克二型死机了。技术人员试了很多办法,最后定位到第70号继电器出错。哈珀观察这个出错的继电器,发现一只飞蛾躺在中间,已经被继电器打死。她小心地用摄子将蛾子夹出来,用透明胶布帖到“事件记录本”中,并注明“第一个发现虫子的实例。”

      从此以后,人们将计算机错误戏称为虫子(bug),而把找寻错误的工作称为(debug)。

    在这里插入图片描述

    2.Bug常见类型

    2.1粗心导致的错误

    1.漏了末尾的冒号: if 循环语句、 else 语句等
    2.缩进错误
    3.英文符号写为中文符号
    4.把字符串str和数字凭借在一起
    5.while循环没有定义变量
    6.比较运算符 == 和赋值运算符 = 混用

    age = int(input('请输入年龄:'))  # input函数返回值为str类型
    if age > 18:
        print('成年了')
    
    • 1
    • 2
    • 3

    2.2知识不熟悉导致的错误

    1.index索引越界
    2.列表方法lst.append

    # 索引越界
    lst = [1, 2, 3, 4]
    # print(lst[4])
    print(lst[3])  # 4
    
    
    # append()方法使用不熟练
    lst = []
    # lst = append(1, 2, 3)
    lst.append(1)  # 每次只能添加一个元素
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    2.3思路不清晰导致的错误

    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    # 思路不清晰导致的问题 基础知识不牢固,练练练!!!
    lst = [{'rating': [9.7, 2062397], 'id': '1292052', 'type': ['犯罪', '剧情'], 'title': '肖申克的救赎', 'actors': ['蒂姆·罗宾斯', '摩根·弗里曼']},
           {'rating': [9.6, 1528760], 'id': '1291546', 'type': ['剧情', '爱情', '同性'], 'title': '霸王别姬', 'actors': ['张国荣', '张丰毅', '巩俐', '葛优']},
           {'rating': [9.5, 1559181], 'id': '1292720', 'type': ['剧情', '爱情'], 'title': '阿甘正传', 'actors': ['汤姆·汉克斯', '罗宾·怀特 ']}
           ]
    
    name = input('请输入你要查询的演员:')
    for item in lst:  # 遍历列表lst  -->{}  item是一个又一个的字典
        act_lst = item['actors']  # 通过item字典中的键actors获取值演员列表
        for actor in act_lst:  # 遍历演员列表
            if name in actor:
                print(name, '出演了', item['title'])
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

    2.4被动掉坑引起的错误

    除零异常

    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    a = int(input('请输入第一个整数:'))
    b = int(input('情书如第二个整数:'))
    result = a/b  # 注意:0不可以做除数
    print('输出结果为:', result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述
    解决办法

    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    try:
        a = int(input('请输入第一个整数:'))
        b = int(input('请输如第二个整数:'))
        result = a / b  # 注意:0不可以做除数
        print("{}除{}等于{}".format(a, b, result))
    except ZeroDivisionError as error:
        print(error)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    在这里插入图片描述

    二、异常处理

      Python提供了异常处理机制,可以在异常出现时即时捕获,然后内部“消化”,让程序继续运行

    1.try-exception语句

    try:
        ...  可能会出异常的代码
        ...
        ...
    except xxx(异常类型):
        ...  异常处理代码
        ...
        ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    try:
        a = int(input('请输入第一个整数:'))
        b = int(input('请输如第二个整数:'))
        result = a / b  # 注意:0不可以做除数
        print('输出结果为:', result)
    except ZeroDivisionError:
        print('对不起,除数不能为0')
    print('程序结束')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述
    在这里插入图片描述

    2.多个except语句

    try:
        ...  可能会出异常的代码
        ...
        ...
    except Exception1:
        ...  异常处理代码
        ...
        ...
    except Exception2:
        ...  异常处理代码
        ...
        ...
    except BaseException:
        ...  异常处理代码
        ...
        ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    try:
        a = int(input('请输入第一个整数:'))
        b = int(input('请输如第二个整数:'))
        result = a / b  # 注意:0不可以做除数
        print('输出结果为:', result)
    except ZeroDivisionError:
        print('对不起,除数不能为0')
    except ValueError:
        print('对不起,只能输入数字串')
    print('程序结束')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    正常输出:
    在这里插入图片描述
    除零异常:ZeroDivisionError
    在这里插入图片描述
    值错误:ValueError
    在这里插入图片描述

    3.try-except-else结构

    如果 try中没有抛出异常,则执行else块;如果try中抛异常,则执行except块,else块不执行。

    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    # 如果 try中没有抛出异常,则执行else块,如果try中抛异常,则执行except块
    try:
        a = int(input('请输入第一个整数:'))
        b = int(input('情书如第二个整数:'))
        result = a / b  # 注意:0不可以做除数
    except BaseException as e:
        print('出错了', e)
    else:
        print('计算结果为', result)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    4.try-except-else-finally结构

    finally 无论是否发生异常都会被执行,常用来解释try块中申请的资源

    # -*- coding: utf-8 -*-
    # @File  : demo.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 10:22
    
    '''
    try except else finally 结构
    finally 无论是否发生异常都会被执行,能常用来解释try块中申请的资源
    '''
    
    try:
        a = int(input('请输入第一个整数:'))
        b = int(input('请输入第二个整数:'))
        result = a / b
    except BaseException as e:
        print('出错了', e)
    else:
        print('结果为:', result)
    finally:
        print('谢谢你的使用')
    print('程序结束')
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    在这里插入图片描述

    5.traceback模块

    使用traceback模块打印异常信息

    # -*- coding: utf-8 -*-
    # @File  : 8.trackback模块.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 16:01
    
    
    import traceback
    
    try:
        print(520)
        print(1 / 0)
    except:
        traceback.print_exc()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述

    三、Python常见异常类型

    异常描述
    ZeroDivisionError除零异常
    IndexError列表中没有次索引(index) 注:索引从零开始
    KeyError映射中没有这个键 dic['key']
    NaneError未声明/初始化对象 (没有属性)
    SyntaxErrorPython语法错误
    ValueError传入无效参数

    四、PyCharm程序调试

    先看一段代码:

    # -*- coding: utf-8 -*-
    # @File  : PyCharm程序的调试.py
    # @author: Flyme awei 
    # @email : Flymeawei@163.com
    # @Time  : 2022/8/15 16:46
    
    
    i = 1
    while i < 2:
        print(i)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    在这里插入图片描述

    1.断点

    程序运行到此处,暂时挂起,停止执行。此时可以详细观察程序的运行情况,方便做出进一步的判断。

    在这里插入图片描述

    2.调试

    进入调试视图的三种方式:

    (1)单击工具栏上的按钮
    在这里插入图片描述

    (2)右键单击编辑区:点击:debug’模块名’
    在这里插入图片描述

    (3)快捷键:shift+F9

    五、总结

    Python常见异常类型

    异常描述
    ZeroDivisionError除零异常
    IndexError列表中没有次索引(index) 注:索引从零开始
    KeyError映射中没有这个键 dic['key']
    NaneError未声明/初始化对象 (没有属性)
    SyntaxErrorPython语法错误
    ValueError传入无效参数
  • 相关阅读:
    Python---使用turtle模块+for循环绘制五角星---利用turtle(海龟)模块
    15:00面试,15:06就出来了,问的问题有点变态。。。
    C#学习笔记--C# Action.Invoke(“Hi“)和Action(“Hi“)有什么区别?
    基于Flume+Kafka+Hbase+Flink+FineBI的实时综合案例(二)数据源
    使用cpolar为Ubuntu的网站配置有特色的地址
    机械故障诊断信号幅域分析- 时域统计特征 | 基于python代码实现,在CWRU和IMF轴承数据及上实战
    vue3的生命周期
    Sentinel熔断降级
    AI的安全应该由谁来保障?Sam Altman和Geoffrey Hinton观点激辩
    mysql8.0.34部署单节点与集群-AB复制(IO与SQL线程不同步解决方法)
  • 原文地址:https://blog.csdn.net/m0_68744965/article/details/126350413