• 异常处理


      今天学习了异常处理。

      什么是异常?

        异常是错误发生前的一种信号

        如果没有人来处理这个信号 程序就会中断执行并抛出错误信息

      异常的分类:

        1.语法检查异常 这种异常是最低级异常 绝对不应该犯

          也非常好避免 如果是编辑器 会自动提示

          如果是文本编辑器 在你运行代码前 解释器会检查语法

        2.运行时异常(逻辑异常)

          这种异常只有在代码被执行时才能发现

          我们要处理的重点就是运行时异常

          特点:在没有运行代码前 是无法发现的

            如果运行时异常已经发生并且没有正确处理它 就抛出错误信息

            并且中断程序的执行  这是要我们学习异常解决的问题

      异常的组成

        1.追踪信息 (具体发生异常的位置 以及函数的调用顺序)

        2.异常的类型 (错误的类型)

        3.异常的消息 (详细的错误消息)

      我们之所以学习异常处理

        为的是让我们的程序更加稳定 (健壮性) 不容易崩溃

      

      常见的发生原因:

      NameError 找不到这个名字 要么变量 要么函数

      ValueError 在调用一个函数时给的值不正确

      TypeError 类型错误 例如字符串与数字加减乘除 调用一个不能被调用的类型

      ZeroDivisionError 除数不能为0

      KeyError 没有这个key

      IndexError 索引不存在

      StopIteration 没有更过的值可以迭代

      FileNotFoundError 文件不存在

      io.UnsupportedOperation 文件的操作不支持

      AttributeError 没有这个属性

      KeyboardInterrupt 程序被强行终止 ctrl + c

      要处理异常

        要学的就是一个新的语法

      今后使用最多的写法:

      try:

        这里放可能出现异常的代码

      except: 异常的类型:

        当异常发生并且异常类型匹配时

        执行except中的代码

      注意:一旦try中有代码抛出了异常 后面的代码全都不执行

      例子:

      print('staring...')

      try:

        name

        [][-1]

        9/0

      except NameError:

        print('名字找不到!')

      except IndexError:

        print('索引超出范围')

      except ZeroDivisionError:

        print('除数不能为0')

      print('ending...') 

      结果为:staring...

          名字找不到!
          ending...

      finally 用法

      无论是否发生异常 都会执行finally 可以用来回收系统资源!

      例子:

      try:

        f = open('a.txt','rt',encoding = 'utf-8')

        f.read()

        f.write('123')

      except Exception:

        print('发生异常了')

      finally:

        print('关闭文件!')

        f.close()

    print(f.closed)

      结果为:发生异常了!

          关闭文件!

          True #代表文件真的关闭了~

      当程序中有一些限制 然而用户没有遵守 我们可以主动抛出异常

      语法:

        raise 异常类型(异常的详细信息)

        类型必须是BaseException的子类

      例子:

      age = input('请输入整型的年龄:')

      if not age.isdigit():

        raise TypeError('你输入的不是整型!')

      age = int(age)

      print('十年后你%s岁'%(age +10))

      

      断言 可以理解为断定 就是很清楚 很明确

      什么时候需要断定?

        下面的代码必须依赖上面代码的正确数据

      语法:assert 结果为Bool的表达式

        如果值为True 则继续往下执行

        为False 抛出一个 AssertionError 表示断言失败

      没有assert 也可以使用if来玩 assert 仅仅是简化了代码

      例子:

      li = []

      assert len(li) >0

      print(li[0])

      

      自定义异常类型

      当系统提供的这些异常类型 和你要描述的错误不匹配时 就需要自定义异常类型

      写法:

        class 自定义异常类型名称(BaseException):

      总结一下:之所以自定义异常类型 是为了更具体描述你的错误 让使用者一眼就看出来

      关键点:1.如何自定义异常类型

          2.在except中 使用as 来获取异常对象

      例子:

      class UnlikeError:

        def __init__(self,msg,text):

          self.msg = msg

          self.text = text

      def hello():

        test = input('输入一段话:')

        if test == '你真帅':

          print('你说得对!')

        else:

          raise UnlikeError('你再看看...','另一份参数')

      try:

        hello()

      except UnlikeError as e:

        print(e.text)

        

      

  • 相关阅读:
    vue-learning:8-template-v-on-and-modifier
    vue-learning:7-template-v-bind-with-class-and-style
    vue-learning:6-template-v-bind
    vue-learning:5-template-v-for
    Bootstrap 导航栏
    Bootstrap 导航元素
    Bootstrap 输入框组
    Bootstrap 按钮下拉菜单
    Bootstrap 按钮组
    Bootstrap 下拉菜单(Dropdowns)
  • 原文地址:https://www.cnblogs.com/xiaocaiyang/p/9889871.html
Copyright © 2020-2023  润新知