python面向对象07/异常处理

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 # 传入一个调用者不期望的值,即使值的类型是正确的

最新文章

  1. Android 常用数据适配器SimpleAdapter
  2. Eclipse集成javap查看字节码
  3. [原创]CI持续集成系统环境---部署Gitlab环境完整记录
  4. 【JAVA、C++】LeetCode 013 Roman to Integer
  5. 算法训练 Torry的困惑(基本型)
  6. HDU5441 Travel 并查集
  7. 1002: A+B for Input-Output Practice (II)
  8. poj 3233 Matrix Power Series
  9. uoj Goodbye Jiawu
  10. 1.4.2. 实现 Core Data Helper 类(Core Data 应用程序实践指南)
  11. Spark SQL笔记——技术点汇总
  12. Uva 548 二叉树的递归遍历lrj 白书p155
  13. js的dom操作和函数
  14. 【CSS3】布局
  15. http摘要认证
  16. TCP/IP数据加密传输及CA简述
  17. concurrent.futures性能阐述
  18. MySQL Point in Time Recovery the Right Way
  19. WebStorm如何分配运行内存?The IDE is running low on memory...
  20. ABAP-数据引用

热门文章

  1. LR脚本信息函数-lr_whoami
  2. java递归遍历树结构目录
  3. mybatis-config.xml核心文件配置
  4. JavaWeb网上图书商城完整项目--day02-4.regist页面提交表单时对所有输入框进行校验
  5. 关于MySQL事务和存储引擎常见FAQ
  6. Python对文本读写的操作方法【源码】
  7. 音视频前沿:新一代 AV1 视频标准究竟是怎样一种存在?
  8. Dynamics CRM 365 不用按钮工具,直接用js脚本控制按钮的显示隐藏
  9. mysql 主键自增设置,插入数据就不必再设置了。
  10. 机器分配——线性dp输出路径