1. 异常错误分类

  • 语法错误

    if 2 > 1
    print(222) dic = {'name'; 'alex'} # 错误使用;
    tu = (2, 3, 4'' 6 ) # 错误使用''
  • 逻辑错误

    num = int(input('请输入数字'))   # 输入的不是数字的时候就会报错
    dic = {'name': '张三', 'age': 18}
    dic['hobby']

2. 什么是异常?

  • 代码发生异常之后,程序就会中断

3. 异常处理

  • 当代码出现异常时,通过某种方式不让程序中断,合理的跳过去.

4. 为什么要有异常处理

  • 用户体验良好
  • 使代码更有健壮性、容错性

5. 异常处理的两种方式

1.if判断

利用if 只能处理简单的异常,如果异常需要考虑的方面比较多,不合适

2.try

  • try简单示例:利用try的方式进行异常处理,try会尝试执行里边的代码

    try:
    num = int(input('>>>')) # 出现ValueError错误之后,直接跳转到except语句.
    print(111)
    except ValueError:
    print(222)
  • 结构一:单分支

    try:
    num = int(input('>>>')) # 出现ValueError错误之后,直接跳转到except语句.
    dic = {'name': '张三'}
    print(111) except ValueError:
    print(222)
  • 结构二:多分支

    try:
    num = int(input('>>>')) # 出现ValueError错误之后,直接跳转到except语句.
    dic = {'name': '张三'}
    print(111)
    except ValueError:
    print('输入的有非数字元素')
    except KeyError:
    print('没有此键')
    except IndexError:
    print('没有此下标')
    print(222)
  • 结构三:万能异常:处理所有Python识别的异常
    如果你对错误信息不关心,只是想要排除错误,让程序继续运行用万能
    如果你对错误信息要进行明确的分流,让你的程序多元化开发用多分支

    try:
    dic = {'name': "张三"}
    print(111)
    except Exception as e:
    print(e)
    print(222)
  • 结构四:多分支 + 万能异常

    def func():
    pass
    def func1():
    pass
    dic = {
    1: func,
    2: func1,
    } try:
    num = int(input('请输入序号'))
    dic[num]()
    except ValueError:
    print('请输入数字')
    except KeyError:
    print('请输入范围内的序号')
    except Exception:
    print('程序出现意料之外的错误....')
  • 结构五:try else finally

    try:
    dic = {'name': '二狗'}
    print(111)
    except KeyError:
    print('没有此键')
    except IndexError:
    print('没有此下标')
    else:
    print('如果没有出现异常则执行这里')
    finally:
    print('finally 666') # else:如果没有出现异常,则执行else
    # except:必须依赖try, else:必须依赖except和try
    # finally:只是依赖于try
    # finally 不管程序出不出现异常都会执行finally,如果程序出现异常在异常出现之前,执行finally语句

    finally应用场景:

    1.用在关闭数据库连接,文件句柄关闭,数据保存,用到finally,可以在finally后边用with open 将文件写进去
    2.在return结束函数,执行finally代码
    3.在break前,会执行finally代码
  • 结构六:主动触发异常

    raise ValueError ('出现了value错误')
  • 结构七:断言,展示出一种强硬的态度

    # assert 条件
    name = '张三'
    user = input('请输入:')
    assert name == user
    print('正常通过了') # assert 条件,assert a == b
    # 条件不成立直接报错 AssertionError
  • 结构八: 自定义异常

    Python中给你提供的错误类型有很多,但不是全部的错误;Python会报所有错误信息,但是没有错误的类型

    class LeError(BaseException):
    def __init__(self,msg):
    self.msg=msg
    def __str__(self):
    return self.msg try:
    raise LeError('自定义异常') # 实例化
    except LeError as e: # 有LeError异常用执行except语句
    print(e)

6. 常见异常种类

  • 常见异常种类释义

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

python 面向对象专题(七):异常处理的更多相关文章

  1. python 面向对象专题(十):特殊方法 (三)__get__、__set__、__delete__ 描述符(三)方法是描述符

    在类中定义的函数属于绑定方法(bound method),因为用户定义的函数都有 __get__ 方法,所以依附到类上时,就相当于描述符.示例 20-13 演示了从 面向对象专题(九)示例 20-8 ...

  2. python 面向对象专题(六):元类type、反射、函数与类的区别、特殊的双下方法

    目录 Python面向对象06 /元类type.反射.函数与类的区别.特殊的双下方法 1. 元类type 2. 反射 3. 函数与类的区别 4. 特殊的双下方法 1. 元类type type:获取对象 ...

  3. python 面向对象专题(五):私有成员、类方法、静态方法、属性、isinstance/issubclass

    https://www.cnblogs.com/liubing8/p/11325421.html 目录 Python面向对象05 /私有成员.类方法.静态方法.属性.isinstance/issubc ...

  4. python 面向对象专题(四):封装、多态、鸭子类型、类的约束、super

    https://www.cnblogs.com/liubing8/p/11321099.html 目录 Python面向对象04 /封装.多态.鸭子类型.类的约束.super 1. 封装 2. 多态 ...

  5. python 面向对象专题(三):继承

    目录 Python面向对象03 /继承 1. 初识继承 2. 单继承 3. 多继承 4. 总结 1. 初识继承 概念:专业角度:如果B类继承A类,B类就称为子类,派生类,A类就称为父类,超类,基类 种 ...

  6. python 面向对象专题(二):类的空间问题、类与对象之间的关系、类与类之间的关系

    https://www.cnblogs.com/liubing8/p/11308127.html 目录 Python面向对象02/类的空间问题.类与对象之间的关系.类与类之间的关系 1. 类的空间问题 ...

  7. python 面向对象专题(一):面向对象初识、面向对象结构、类、self、实例化对象

    https://www.cnblogs.com/liubing8/p/11301344.html 目录 Python面向对象01 /面向对象初识.面向对象结构.类.self.实例化对象 1. 面向对象 ...

  8. Python面向对象补充以及异常处理

    面向对象相关内容 一.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象 class Foo(object): pass obj = Foo() isinstance(o ...

  9. python面向对象其他相关-异常处理-反射

    1.isinstance(obj, cls) 检查是否obj是否是类 cls 的对象   2.issubclass(sub, super) 检查sub类是否是 super 类的派生类 n1 = 10 ...

随机推荐

  1. DML_Data Modification_INSERT

    Data Modification (INSERT.DELETE.UPDATE.MERGE)之INSERT(基础知识,算是20年来第2次学习MSSQL吧,2005年折腾过一段时间的Oracle)INS ...

  2. 综合练习: PIVOT、UNPIVOT、GROUPING SETS、GROUPING_ID_1

    综合练习: PIVOT.UNPIVOT.GROUPING SETS.GROUPING_ID 问题1:Desired output: empid cnt2007 cnt2008 cnt2009 ---- ...

  3. excel如何快速计算日期对应的生肖?

      是否可以根据日期统计出生肖? 牛闪闪想应该可以吧!结果搜到了一个巨牛无比的公式. =MID("猴鸡狗猪鼠牛虎兔龙蛇马羊",MOD(YEAR(B2),12)+1,1), 利用年份 ...

  4. HBase 中加盐(Salting)之后的表如何读取:Spark 篇

    我们知道,HBase 为我们提供了 hbase-mapreduce 工程包含了读取 HBase 表的 InputFormat.OutputFormat 等类.这个工程的描述如下:This module ...

  5. SQL中游标的使用示例

    declare @email_source varchar(MAX); --1.原始发件人字段 declare @key_name varchar(50); --2.我方卷号或客户代码 declare ...

  6. rust 编码模式

    ➜ hello_cargo git:(master) ✗ rustc --print code-models Available code models: small kernel medium la ...

  7. 'ipconfig' 不是内部或外部命令,也不是可运行的程序 或批处理文件

    今天在学习的时候需要找本地ip地址,可是在命令行窗口却显示 百度之后发现原来是环境变量没配置的问题(其实之前是ok的,但应该是anconda安装的时候点了那个一键设置环境变量搞得本地的path里的数据 ...

  8. #PHP 类的多继承实现之 traits.md

    TRAIT PHP本身是并不支持多继承的,也就是,一个类只能继承一个类,为了满足业务需求,后来有了一些解决方法,例如,链式继承,B继承A,然后C继承B,这样,C就同时继承了AB, 此外还有接口,因为接 ...

  9. 009.OpenShift管理及监控

    一 资源限制 1.1 pod资源限制 pod可以包括资源请求和资源限制: 资源请求 用于调度,并控制pod不能在计算资源少于指定数量的情况下运行.调度程序试图找到一个具有足够计算资源的节点来满足pod ...

  10. 暑假集训Day 4 P4163 [SCOI2007]排列 (状压dp)

    状压dp (看到s的长度不超过10就很容易想到是状压dp了 但是这个题的状态转移方程比较特殊) 题目大意 给一个数字串 s 和正整数 d, 统计 s 有多少种不同的排列能被 d 整除(可以有前导 0) ...