Python 第九节 第一课

    科技2023-12-14  97

    [toc]

    导引问题

        在实际工作中, 我们遇到的情况不可能是非常完美的. 比如: 你写的某个模块, 用户输入不一定符合你的要求; 你的程序要打开某个文件, 这个文件可能不存在或者文件格式不对; 你要读取数据库的数据, 数据可能是空的. 完美的程序在运行着, 但是内存或者硬盘可能满了等等. 

        软件程序在运行过程中, 非常可能遇到刚刚提到的这些问题, 我们称之为异常, 英文是: Exception, 意思是例外. 遇到这些例外情况, 或者叫异常, 我们怎么让写的程序作出合理的处理, 而不至于程序崩溃呢? 我们本章就要讲解这些问题.

        如果我们要拷贝一个文件, 在没有异常机制的情况下, 我们需要考虑各种异常情况, 伪代码如下:

    伪代码使用 if 处理程序中可能出现的各种情况

    #将 d:/a.txt 拷贝到 e:盘

    if  "d:/a.txt" 这个文件存在:

        if  e 盘的空间大于 a.txt 文件长度:

            if 文件复制一半 IO 流断掉:

                停止 copy, 输出: IO 流出问题 !

             else:

                copyFile("d:/a.txt", "e:/a.txt")

        else:

            print("e 盘空间不够存放 a.txt !")

    else:

        print("a.txt 不存在 !")

    这种方式, 有两个坏处:

     

        1. 逻辑代码和错误处理代码放一起 !

        2. 程序员本身需要考虑例外情况复杂, 对程序员本身要求较高 !

        那么, 我们如何解决应对异常情况呢 ? python 的异常机制给我们提供了方便的处理方式. 如上情况, 如果是用 python 的异常机制来处理, 示意代码如下

    #将 d:/a.txt 拷贝到 e: 盘

    try:

        copyFile("d:/a.txt", "e:/a.txt")

    except:

        print("文件无法拷贝")

    异常机制本质

        异常指程序运行过程中出现的非正常现象, 例如用户输入错误, 除数为零, 需要处理的文件不存在, 数组下标越界等.

        所谓异常处理, 就是指程序出现问题时依然可以正确的执行剩余的程序, 而不会因为异常而终止程序执行.

        Python 中, 引进了很多用来描述和处理异常的类, 称为异常类. 异常类定义中包含了该类异常的信息和对异常进行处理的方法. 下面较为完整的展示了 python 中内建异常的继承层次:    

    我们处理一下, 遇到的第一个异常:

    执行结果:

    Python 中一切都是对象, 异常也采用对象的方式来处理. 处理过程:

        1. 抛出异常: 在执行一个方法时, 如果发生异常, 则这个方法生成代表该异常的一个对象, 停止当前执行路径, 并把异常对象提交给解释器.

        2. 捕获异常: 解释器得到该异常后, 寻找相应的代码来处理该异常.

    解决异常问题的态度

        学习完相关的知识点, 知识开始对异常有些认识, 不意味着你会调试任何异常. 调试异常, 需要大量的经验作为基础. 因此, 大家不要在此停留, 继续往后学习. 碰到每个异常. 都要花心思去解决而不要动不动张口问人. 通过自己的努力无法解决, 再去找老师同学帮助解决.

        解决每一个遇到的异常, 建议大家遵循如下三点:

        1. 不慌张, 细看信息, 定位错误. 看清楚报的错误信息, 并定位发生错误的地方.

        2. 百度并查看十几个相关帖子. 将异常类信息进行百度, 至少查看十个以上的相关帖子.

        3. 以上两步任然无法解决, 找老师和同学协助解决.

        正常情况, 自己遵循如上步骤解决 30 个以上的错误, 就能积累初步的调试经验, 以后遇到的大部分错误都能独立完成.

    异常解决的关键: 定位

    当发生异常时, 解释器会报相关的错误信息, 并会在控制台打印出相关错误信息. 我们只需要按照从上到下的顺序即可追溯 ( Trackback ) 错误发生的过程.

    执行结果:

    Processed: 0.032, SQL: 8