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. [转] CISC与RISC

    点击阅读原文      这里就不去管细节,简单来谈一下,ARM和X86之间为什么不太具有可比性的问题.要搞清楚这个问题首先要明白什么是架构,之前也有很多人提到了架构不同,但架构是什么意思?它是一个比较 ...

  2. python + selenium登陆并点击百度平台

    from PIL import Imagefrom selenium.webdriver import DesiredCapabilitiesfrom selenium import webdrive ...

  3. iOSdelegate、Notification、block区别

    1.delegate与block一般用于1对1的通信交互.delegate需先定义好协议方法,代理对象实现协议方法且需要建立代理关系才可以通信. 2.block使用简洁,如果通信事件较多,建议使用de ...

  4. 大众点评cat实时监控简介及部署

    简介 背景 CAT(Central Application Tracking)是由吴其敏(前大众点评首席架构师,现携程架构负责人)主导设计基于Java开发打造的实时应用监控平台,为大众点评网提供了全面 ...

  5. jmeter正则提取器提取一个值或多个值

    [安装Dummy插件] 这个插件可以模拟服务器返回,相当于一个mockserver了. 首先安装Dummy,选项--插件管理--可选插件--Dummy. [模拟响应] 添加线程组,在线程组下添加Dum ...

  6. mysql大表在不停机的情况下增加字段该怎么处理

    MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明. 1. 环境准备 数据库版本: 5.7.25-28(Percona 分 ...

  7. 并发编程之详解InheritableThreadLocal类原理

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

  8. Java 多线程基础(十)interrupt()和线程终止方式

    Java 多线程基础(十)interrupt()和线程终止方式 一.interrupt() 介绍 interrupt() 定义在 Thread 类中,作用是中断本线程. 本线程中断自己是被允许的:其它 ...

  9. 谈谈java中的并发(一)

    一.并发的定义 并发:对于这个概念一直就是没怎么搞懂,就是感觉特别的生疏,(自己从从字面上理解就是多个东西,一起出发),所以就上网上查了一些资料: 同时拥有两个或多个线程,如果程序在单核处理器上运行, ...

  10. 网站搬家之mysql 5.7 date类型默认值不能设置‘0000-00-00’的问题

    网站搬家,mysql版本由5.6升级到5.7,遇到问题: mysql 5.7之后版本datetime默认值设置'0000-00-00',出现异常:Invalid default value for ' ...