041.Python异常处理_初识异常

2023-12-18 16:28:52

无奋斗不青春

我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈
入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈
虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈
PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)文章合集 👈👈
Oracle数据库教程:👉👉 Oracle数据库文章合集 👈👈
优 质 资 源 下 载 :👉👉 资源下载合集 👈👈

分隔线

初识异常

异常和错误的概念

错误
  • 概念
    • 没法通过其他代码进行处理的问题,包括语法错误和逻辑错误
  • 语法错误
    • 比如:定义函数时,写成了dfe xxx()
    • 这种错误,可以直接通过IDE或者解释器给出的提示进行修改
  • 逻辑错误
    • 语法层面没有问题,仅仅是自己设计的逻辑出现问题
    • 比如:用户输入年龄,判定是否成年
      if age < 18:
          print('已经成年了')
      
    • 这种错误,IDE或者解释器无法检测出来,只有我们通过代码测试进行排除
异常
  • 概念
    • 多指程序在执行过程中,出现的位置错误,语法和逻辑都是正确的。可以通过其他代码进行处理修复
  • 示例1
    • 让用户输入年龄,判断是否成年
      age = input('请输入年龄:')
      if int(age) > 18:
          print('已经成年了')
      
    • 这段代码语法和逻辑都没有问题,但是如果用户输入一个abc,那么int(age)这里就会抛出异常
    • 那么,我们可以在进行int(age)这个操作之前加一些代码进行判断,判断是否是我们想要的数据类型,再进行转换,就可以避免这个报错
  • 示例2
    • 设计一个计算器的除法
      def devide(x, y):
          return x / y
      
    • 这段代码语法和逻辑也没有问题,但是如果用户给参数y传入一个0,那么在计算x / y的时候也会抛出异常
    • 当然,我们也可以在接收这个参数的时候加上一些代码进行判断,判断 y <> 0的时候才执行除法操作
  • 示例3
    • 列表或者字典,在使用过程中,出现索引或者key的错误
      l = ['a', 'b']
      
      print(l[3])
      
  • 这一系列的示例中,出现的异常,我们都可以通过增加一些其他代码进行处理修复

常见的系统异常

常见异常
  • 除零异常
    2 / 0
    
    # ZeroDivisionError —— ArithmeticError —— Exception —— BaseException
    
  • 名称异常
    print(name)
    
    # NameError —— Exception —— BaseException
    
  • 类型异常
    '1' + 2
    
    # TypeError —— Exception —— BaseException
    
  • 索引异常
    l = ['a', 'b']
    l[3]
    
    # IndexError —— LookupError —— Exception —— BaseException
    
  • 键异常
    dic = {'a':1, 'b':2}
    dic['c']
    
    # KeyError —— LookupError —— Exception —— BaseException
    
  • 值异常
    int('abc')
    
    # ValueError —— Exception —— BaseException
    
  • 属性异常
    name = '失心疯'
    name.xx
    
    # AttributeError —— Exception —— BaseException
    
  • 迭代器异常(停止异常)
    ite = iter([1, 2])
    next(ite)
    next(ite)
    next(ite)
    
    # StopIteration —— Exception —— BaseException
    
  • 文件未找到异常
    with open('./异常处理.txt', mode='r', encoding='utf-8') as f:
        f.read()
    
    # FileNotFoundError —— (OSError)WindowsError —— Exception —— BaseException
    
系统异常类继承树
  • 继承树
    # BaseException                 # 所有内建异常的基类
        # SystemExit                # 由sys.exit()函数引发,当它不处理时,Python解释器退出
        # KeyboardInterrupt         # 当用户点击中断键时引发
        # GeneratorExit             # 当调用一种generator的close()方法时引发
        # Exception                 # 所有内置的、非系统退出异常都是从该类派生的(所有自定义异常都应该继承自该类)
            # ArithmeticError
                # ZeroDivisionError
            # NameError
            # TypeError
            # LookupError
                # IndexError
                # KeyError
            # ValueError
            # AttributeError
            # StopIteration
            # WindowsError
                # FileNotFoundError
    
  • 在这里插入图片描述

如何解决异常

  • 系统一开始已经内置了一些特定的应用场景;当我们写代码的过程当中,一旦触发了这个场景,系统内部就会自动的向外界抛出这个问题,也就是我们所谓的异常
  • 如果我们不处理这些异常,程序就会被终止执行,软件崩溃
  • 解决方案
  • 1、预防
    • 措施:
      • 添加容错代码
    • 弊端:
      • 1、有些异常无法预防,如:NameError
      • 2、容错代码不属于业务逻辑,容错代码过多会造成代码混乱,主业务不清晰
  • 2、解决
    • 措施:
      • 异常捕获处理

文章来源:https://blog.csdn.net/weixin_50296259/article/details/135052681
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。