• 一文读懂Python异常


    Python异常

    目录

    1什么是异常?

    异常即是一个事件,该事件会在程序执行过程中发生,影响了程序的正常执行。一般情况下,在Python无法正常处理程序时就会发生一个异常。异常是Python对象,表示一个错误。当Python脚本发生异常时我们需要捕获处理它,否则程序会终止执行

    2 python中常见异常

    关键字:try、except、finally、else、raise

    python中捕捉异常模块try/except,其中python中有一些自定义的异常,具体如下

    • AttributeError 调用不存在的方法引发的异常

    • EOFError 遇到文件末尾引发的异常`

    • ImportError 导入模块出错引发的异常

    • IndexError 列表越界引发的异常

    • IOError I/O操作引发的异常,如打开文件出错等

    • KeyError 使用字典中不存在的关键字引发的异常

    • NameError 使用不存在的变量名引发的异常

    • TabError 语句块缩进不正确引发的异常

    • ValueError 搜索列表中不存在值引发的异常

    • ZeroDivisionError 除数为零引发的异常

    3异常的捕获

    try:
    except Exception:
    finally:
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 自定义异常

      # 自定义异常类
      class AgeError(Exception):
      
          def __init__(self, age):
              self.__age = age
      
          # 重写str方法
          def __str__(self):
              return "您传入的年龄不满足需求:age=%d" % self.__age
      
      age =10
      try:
          raise AgeError(age)
      except Exception as e:
          print(e)
      
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-udglPlq2-1659251982048)(image/image_qBvcHgZtad.png)]

      traceback.print_exc()实现 通过 系统角度 打印后继续执行

      这样捕捉到异常后程序还会继续往后执行,如果不捕捉的话,那么抛出该运行时异常程序则会中断

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-09J85RtE-1659251982049)(image/image_km5bLc6iB3.png)]

      注:实体类中 要有__enter__ __exit__函数,分别 负责初始化以及清理工作

    • if else 异常模式

      try:
      <语句>        #运行别的代码
      except <名字><语句>        #如果在try部份引发了'name'异常
      except <名字><数据>:
      <语句>        #如果引发了'name'异常,获得附加的数据
      else:
      <语句>        #如果没有异常发生
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    • 多异常处理

      ...
      except(ZeroDivisionError, TypeError, NameError):
      ...
      
      • 1
      • 2
      • 3
    • try-finally 语句

      任何情况下都会执行finall中的语句

      try:
      <语句>
      finally:
      <语句>    #退出try时总会执行
      raise
      
      • 1
      • 2
      • 3
      • 4
      • 5
    • with as取代try-finally

      • 要求

        with所求值的对象必须有一个__enter__()方法,一个__exit__()方法

      with 实体类 as 返回值
        方法或函数体
      
      class Sample:
          def __enter__(self):
              print("In __enter__()")
          def __exit__(self, type, value, trace):
              print("In __exit__()")
      S=Sample()
      with S as sample:
          raise Exception("错误出现")
      
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12

      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5OrHDXLm-1659251982049)(image/image_sbfuWClWsq.png)]

    4 异常跟踪

    try:
        c = 1 / 0
    except Exception as e:
        #收集出现的错误
        info = sys.exc_info()
        #跟踪该错误信息,limit参数为打印跟踪的条目
        traceback.print_tb(info[2])
        print(info)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nm04RxLx-1659251982050)(image/image_-blQV9BUQg.png)]

    补充一下 日志打印 用 log

  • 相关阅读:
    基于Locust实现MQTT协议服务的压测脚本
    怎么压缩图片不影响清晰度
    Rust 中使用 :: 这种语法的几种情况
    Vue之安装Vue.js devtools
    Pushgateway的场景使用
    以开发之名|斗罗大陆:创造一个尽情探险的开放式游戏世界
    网络安全(黑客)自学
    c51定时器
    如何将字体添加到 ONLYOFFICE 桌面编辑器8.0
    【物流中心选址】智能优化算法在物流中心选址的应用(Matlab代码实现)
  • 原文地址:https://blog.csdn.net/runofsun/article/details/126086027