zoukankan      html  css  js  c++  java
  • Python进阶-异常处理

    一、异常

    1.异常的定义

       异常是错误发生的信号,程序一旦出错就会抛出错误信息,如果不及时处理就会程序就会随之停止运行

      异常有三部分组成:

        1)异常类型

             2)异常追踪

             3)异常的值

    2.异常的分类

        1)语法错误

               无法通过Python解释器解释的语法

        2)逻辑错误

    3.异常的种类

    AttributeError 访问一个对象不存在的属性
    IOError 输入/输出异常,例如无法打开文件
    ImportError 无法引入模块或包,通常是路径问题或名称错误
    IndentationError 语法错误(的子类),代码缩进错误
    IndexError 下标索引超出序列边界
    KeyError 试图访问字典里不存在的键
    KeyboardInterrupt Ctrl+C被按下
    NameError 使用一个还未被赋予对象的变量
    SyntaxError Python代码非法,代码不能编译,例如语法错误
    TypeError 传入对象类型与要求的不符合
    UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另有一个同名的全局变量,
    导致你以为正在访问它
    ValueError 传入一个调用者不期望的值,即使值的类型是正确的

    二、异常处理

    1.语法 

    try:
        # 代码块
    except (错误类型1, ...):
        # 代码块

      1)单分支

    try:
        print('start...')
        s = 1
        y
        l = []
        l[2]
        print('end...')
    except NameError:
        print('变量名没有赋值')
    
    # 输出结果
    start...
    变量名没有赋值

      2)多分支

    try:
        print('start...')
        s = 1
        # y
        l=[]
        l[2]
        print('end...')
    except NameError:
        print('变量名没有赋值')
    except IndexError:
        print('索引不存在')
    # 输出结果 start... 索引不存在

      3)多种异常处理同一段逻辑处理

    try:
        print('start...')
        s = 1
        # y
        l=[]
        l[2]
        print('end...')
    except (NameError,IndexError):
        print('一行匹配多个错误')

       4)万能异常

    try:    
        print('start...')
        s = 1
        # y
        l=[]
        l[2]
        print('end...')
    except Exception as e:
        print('万能异常匹配')
    else:
        print('不存在异常的时候才被执行')
    finally:
        print('有无异常都被执行')

      5)获取异常值

      6)try...else...(else必须与except组合使用)

            else只有在被监测的代码不存在异常时才会被执行

      7)try...finally...

            finally无论被监测的代码是否存在异常时都会被执行

    # finally的子代码块中通常放回收系统资源的代码
    try:
        f=open('f.txt','w',encoding='utf-8')
        f.readline()
    except Exception as e:
        print(e)
    finally:
        f.close()

    2.主动触发异常

      raise 异常类型('.....')

    3.断言

      assret 条件

    4.自定义异常处理

    class RegisterError(BaseException):
    
        def __init__(self,user,msg):
            self.msg = msg
            self.user = user
    def __str__(self):
        return '<user:%s %s >' % (self.user,self.msg)
    raise RegisterError('zhang','登录失败')

    5.异常处理使用的场景

      为确保程序的可读性,应尽量少用

  • 相关阅读:
    java中的自动拆装箱详解
    Information:java: javacTask: 源发行版 8 需要目标发行版 1.8
    2019 安易迅java面试笔试题 (含面试题解析)
    2019 农信互联java面试笔试题 (含面试题解析)
    2019 博盾习言java面试笔试题 (含面试题解析)
    2019 蓝鲸人java面试笔试题 (含面试题解析)
    2019 上海轻轻java面试笔试题 (含面试题解析)
    2019 苏州朗动java面试笔试题 (含面试题解析)
    2019 医渡云java面试笔试题 (含面试题解析)
    2019 海看java面试笔试题 (含面试题解析)
  • 原文地址:https://www.cnblogs.com/mdzzbojo/p/8873285.html
Copyright © 2011-2022 走看看