zoukankan      html  css  js  c++  java
  • python面试测试开发的你,想通过面试吗!这些异常原理你知道多少呢?

    我们先通过一个例子来了解代码中引入异常处理的原因。


    执行结果

    Traceback(most recent call last):

    File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 4,in print(a/b)

    ZeroDivisionError:division by zero

    Start

    Processfinished with exit code 1

    大家可以看到代码出现了问题,这个结果是可以预见的,但是End并没有成功打印,这说明了print('End')语句没有被执行,所以程序中一旦出现了异常,那么异常点后面的语句是不会被执行的!

    我们可以利用条件语句来解决这个问题,代码如下:


    运行结果

    Start

    catch exception

    End

    大家可以看到try中的代码print(a / b)出了异常被except捕获,然后执行了print("catch exception"),最后程序正常执行完毕!

    讲到这里可能有的同学会问,明明可以用条件语句就可以解决的问题,为什么还要引入异常机制呢?最简单的解释就是,用异常机制会大大的减少代码量,这个例子比较简单大家可能体会不到,在实际编码中try里面是会有很多行代码的,只要有错误那么就会被catch住!如果使用条件语句,那么就需要在多行代码中都进行判断,这个代码量可想而知!

    异常的类型

    异常也是分种类的,处理不同类型的错误,会使用不同的异常类型,python的标准异常包括:

    • BaseException 所有异常的基类
    • SystemExit 解释器请求退出
    • KeyboardInterrupt 用户中断执行
    • Exception 常规错误的基类
    • StopIteration 迭代器没有更多的值
    • GeneratorExit 生成器(generator)发生异常来通知退出
    • StandardError 所有的内建标准异常的基类
    • ArithmeticError 所有数值计算错误的基类
    • FloatingPointError 浮点计算错误
    • OverflowError 数值运算超出最大限制
    • ZeroDivisionError 除(或取模)零 (所有数据类型)
    • AssertionError 断言语句失败
    • AttributeError 对象没有这个属性
    • EOFError 没有内建输入,到达EOF 标记
    • EnvironmentError 操作系统错误的基类
    • IOError 输入/输出操作失败
    • OSError 操作系统错误
    • WindowsError 系统调用失败
    • ImportError 导入模块/对象失败
    • LookupError 无效数据查询的基类
    • IndexError 序列中没有此索引(index)
    • KeyError 映射中没有这个键
    • MemoryError 内存溢出错误(对于Python 解释器不是致命的)
    • NameError 未声明/初始化对象 (没有属性)
    • UnboundLocalError 访问未初始化的本地变量
    • ReferenceError 弱引用(Weak reference)试图访问已经垃圾回收了的对象
    • RuntimeError 一般的运行时错误
    • NotImplementedError 尚未实现的方法
    • SyntaxErrorPython 语法错误
    • IndentationError 缩进错误
    • TabErrorTab 和空格混用
    • SystemError 一般的解释器系统错误
    • TypeError 对类型无效的操作
    • ValueError 传入无效的参数
    • UnicodeErrorUnicode 相关的错误
    • UnicodeDecodeErrorUnicode 解码时的错误
    • UnicodeEncodeErrorUnicode 编码时错误
    • UnicodeTranslateErrorUnicode 转换时错误
    • Warning 警告的基类
    • DeprecationWarning 关于被弃用的特征的警告
    • FutureWarning 关于构造将来语义会有改变的警告
    • OverflowWarning 旧的关于自动提升为长整型(long)的警告
    • PendingDeprecationWarning 关于特性将会被废弃的警告
    • RuntimeWarning 可疑的运行时行为(runtime behavior)的警告
    • SyntaxWarning 可疑的语法的警告
    • UserWarning 用户代码生成的警告

    使用不同类别的异常无法捕获非自身种类的异常,例如使用IOError是无法捕获ZeroDivisionError的,代码如下:


    运行结果

    Start

    Traceback (most recent calllast):

    File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/exception_demo.py", line 5,in

    print(a / b)

    ZeroDivisionError: division byzero

    使用except可以带多种异常类型,

    try:

    正常的操作

    ......................

    except(Exception1, Exception2,...ExceptionN):

    发生以上多个异常中的一个,执行这块代码

    ......................

    try...except BaseExceptionas msg: 输出异常信息.例如:


    输出:

    Start

    division by zero

    End

    try...except...finally

    该语句的含义是无论是否发生异常都将执行最后finally中的代码。示例代码如下:


    输出:

    Start

    exception

    finally

    End

    抛出异常

    raise语句允许程序员强制发生指定的异常。如果你需要确定是否引发了异常但不打算处理它时可以使用!例如:


    运行结果

    Traceback(most recent call last):

    File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/except_demo2.py", line 7,in

    exp_fuc()

    File"C:/Users/Kevin/PycharmProjects/PyDemo/p1/except_demo2.py", line 5,in exp_fuc

    raise IOError

    OSError

    可以看到代码抛出了IOError,由于没有被捕获,所以print('End')没有被执行

    自定义异常

    程序可以通过创建新的异常类来命名它们自己的异常。异常通常应该直接或间接地从Exception类派生。


    运行结果

    Myexception: my error

    此文转载文,著作权归作者所有,如有侵权联系小编删除!

    原文地址:https://www.tuicool.com/articles/VnuemaI

    需要源代码的或者想了解更多的(点击这里下载)

  • 相关阅读:
    Linux内核的异常修复原理
    sudo: insmod: command not found
    在Qemu+ARM上运行Minix3内核
    2021.34 面对干扰
    2021.33 实践
    selenium+python自动化106
    python测试开发django-111.模型管理器(models.Manager)
    python笔记64
    python笔记63
    python笔记62
  • 原文地址:https://www.cnblogs.com/wxys/p/13746751.html
Copyright © 2011-2022 走看看