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. Spring:BeanDefinition&PostProcessor不了解一下吗?

    水稻:这两天看了BeanDefinition和BeanFactoryPostProcessor还有BeanPostProcessor的源码.要不要了解一下 菜瓜:six six six,大佬请讲 水稻 ...

  2. Android学习笔记物理按键事件处理

    常见的物理按键: Android为每个物理按键都提供了如下几个回调方法: 代码示例: package com.example.demo3; import androidx.appcompat.app. ...

  3. windows下使用虚拟机安装linux操作系统

    前言:虚拟机是开发者的好帮手,它可以帮助我们在同一台电脑上创建不同的环境,这样你就可以在不影响原有的环境下,使用另外一套新的环境去完成你的开发工作.相信不少在windows下开发的同学对此深有体会,本 ...

  4. WeChair项目Beta冲刺(8/10)

    团队项目进行情况 1.昨日进展    Beta冲刺第八天 昨日进展: 前后端并行开发,项目按照计划有条不絮进行 2.今日安排 前端:扫码占座功能和预约功能并行开发 后端:扫码占座后端逻辑开发,编码使用 ...

  5. NodeJs通过HTTP模块发起GET|POST请求

    [本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] Node.js ...

  6. 图解 Git 基本命令 merge 和 rebase

    Git 基本命令 merge 和 rebase,你真的了解吗? 前言 Git 中的分支合并是一个常见的使用场景. 仓库的 bugfix 分支修复完 bug 之后,要回合到主干分支,这时候两个分支需要合 ...

  7. Dubbo的使用及原理

    Dubbo是什么? Dubbo是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点. Dubbo[]是 ...

  8. Eureka心跳健康检查机制和Spring boot admin 节点状态一直为DOWN的排查(忽略某一个节点的健康检查)

    https://www.jdon.com/springcloud/eureka-health-monitoring.html 运行阶段执行健康检查的目的是为了从Eureka服务器注册表中识别并删除不可 ...

  9. 动力节点 mysql 郭鑫 34道经典的面试题三

    1.第十五题 15.列出受雇日期早于其直接上级的所有员工编号.姓名.部门名称 思路一:第一步将emp a看成员工表,将emp b 看成领导表,员工表的mgr字段应该等于领导表的主键字段 mysql&g ...

  10. DNS信息收集-NSLOOKUP

    上一篇文章简单介绍了nslookup的简单用法,这篇文章进一步介绍nslookup. nslookup可以指定DNS服务器,使用server参数: 可以看到,采用不同的DNS服务器的到的结果是不一样的 ...