Python异常处理

六、异常处理

  1. 基本语法

    try:
        # 尝试运行的代码块
        result = 10 / 0
    except ZeroDivisionError as e:
        # 捕获 ZeroDivisionError 异常
        print("不能除以零!", e)
    except TypeError as e:
        print("类型错误!", e)
    except Exception as e:    # 这里可以捕获所有的错误 
        print("其他错误", e)
    else:
        # 如果没有异常发生,执行此代码块
        print("没有发生异常,结果是", result)
    finally:
        # 无论是否发生异常,都执行此代码块
        print("执行完成")
    
    
    • try:包含可能发生异常的代码。
    • except:处理特定的异常类型。如果except有一些错误不能捕捉,会直接抛出异常
    • else:当没有异常发生时执行的代码。
    • finally:无论是否发生异常都会执行,常用于资源清理(如关闭文件)。
  2. 捕获多个异常

    • 可以通过多个 except 块捕获不同的异常类型,也可以在一个 except 中捕获多个异常类型。

    • 例子

      try:
          result = int("string")  # 将字符串转换为整数
      except (ValueError, TypeError) as e:
          print("捕获 ValueError 或 TypeError 异常", e)
      
  3. 自定义异常

    • Python 允许创建自定义异常,通过继承内置的 Exception 类实现。自定义异常可以提供更详细的错误描述。

    • 例子

      class CustomError(Exception):
          """自定义异常类型"""
          def __init__(self, message):
              self.message = message
      
      try:
          raise CustomError("这是一个自定义错误")
      except CustomError as e:
          print("捕获自定义异常:", e) #捕获自定义异常: 这是一个自定义错误
      
    • print(e)的内容取决于什么?取决于构造函数的传参,

      class CustomError(Exception):
          """自定义异常类型"""
          def __init__(self, age, message):
              self.age = age
              self.m = message
              
      
      try:
          raise CustomError(10, "这是一个自定义错误")
      except CustomError as e:
          print("捕获自定义异常:", e)  # 捕获自定义异常: (10, '这是一个自定义错误')
      
    • 同时也可以用__str____repr__来控制输出。

      class CustomError(Exception):
          """自定义异常类型"""
          def __init__(self, age, message):
              self.age = age
              self.m = message
          def __str__(self) -> str:
              return f"亲,你遇到了一个自定义错误CustomError"
              
      
      try:
          raise CustomError(10, "这是一个自定义错误")
      except CustomError as e:
          print("捕获自定义异常:", e) # 捕获自定义异常: 亲,你遇到了一个自定义错误CustomError
      
  4. 忽略异常

    try:
        risky_operation()   # 可能发生错误的操作
    except:
        pass  # 不做任何处理,直接忽略错误
    
posted @ 2024-11-15 14:27  ouyangxx  阅读(3)  评论(0编辑  收藏  举报