当前位置: 首页 > article >正文

python语言基础-3 异常处理-3.3 抛出异常

声明:本内容非盈利性质,也不支持任何组织或个人将其用作盈利用途。本内容来源于参考书或网站,会尽量附上原文链接,并鼓励大家看原文。侵删。

3.3 抛出异常

业务层级(高层级)的代码会捕捉一些异常进行提示,而基础层级(低层级)的代码中则可能需要我们主动抛出一些相应类型的异常。

python中抛出异常的关键字是raise。raise用于抛出一个异常实例,通常有以下三种常用情况的用法:

  • raise单独使用,后面不跟异常对象或异常类。可以在特定语句执行是引发RuntimeError异常;
  • raise后面跟异常类。抛出指定异常类的默认实例;
  • raise后面跟异常实例。抛出指定的异常实例。

(1)raise单独使用,抛出RuntimeError异常

def input_age(age):
    if 150 >= age >= 0:
        return age
    if age < 0 or age > 150:
        raise


try:
    input_age(160)
    
except RuntimeError:
    print("发生了运行时异常")
except Exception as e:
    print("异常了")

(2)raise后面跟异常类

前面我们在方法重载时学习到,如果没有相应的重载方法将会异常。在这个例子中我们会在原方法中抛出一个异常。如下:

from functools import singledispatchmethod

class Negator:
    @singledispatchmethod
    @classmethod
    def neg(cls, arg):
        raise NotImplementedError  # 后面跟一个异常类

    @neg.register
    @classmethod
    def _(cls, arg: int):
        return -arg

    @neg.register
    @classmethod
    def _(cls, arg: bool):
        return not arg

n = Negator.neg("except")

(3)raise后面跟异常实例

还是方法重载的例子,raise后面也可以抛出一个异常实例。如下:

from functools import singledispatchmethod

class MyException(Exception):
    def __init__(self, code, message):
        self.code = code
        self.message = message

    def __str__(self):
        return f"{self.code}: {self.message}"

class Negator:
    @singledispatchmethod
    @classmethod
    def neg(cls, arg):
        raise MyException(400, "缺少相关的重载方法") # 后面跟的是一个实例
        # raise NotImplementedError("缺少相关的重载方法")  # 内置异常也可以实例化
        
    @neg.register
    @classmethod
    def _(cls, arg: int):
        return -arg

    @neg.register
    @classmethod
    def _(cls, arg: bool):
        return not arg


n = Negator.neg("except")

http://www.kler.cn/a/382902.html

相关文章:

  • Ubuntu 安装 RTL8811cu 网卡驱动
  • SpringBoot3集成Junit5
  • buu PWN5
  • 深入理解 C++ 中的 std::vector
  • 深入理解网络协议:OSPF、VLAN、NAT与ACL详解
  • 学习党的二十大精神,推动科技创新和发展
  • ElasticSearch 简单的查询。查询存在该字段的资源,更新,统计
  • 大厂面试真题-简单说说线程池接到新任务之后的操作流程
  • 传统媒体终端移动化发展新趋势:融合开源 AI 智能名片与 S2B2C 商城小程序的创新探索
  • 【大数据技术基础 | 实验八】HBase实验:新建HBase表
  • IDEA接入OpenAI API 方法教程
  • kotlin 协程方法总结
  • 【动手学电机驱动】STM32-FOC(3)STM32 三路互补 PWM 输出
  • 【MySQL系列】字符集设置
  • 搜维尔科技:Xsens和BoB助力生物力学教育
  • 是时候用开源降低AI落地门槛了
  • 洛科威岩棉板凭借多重优势,在工业管道保温领域大放异彩
  • 通宵修bug
  • 空间解析几何6:空间圆柱体的离散化表示【附MATLAB代码】
  • 封装axios、环境变量、api解耦、解决跨域、全局组件注入
  • 根据问题现象、用户操作场景及日志打印去排查C++软件问题,必要时尝试去复现问题
  • 修改elementUI等UI组件样式的5种方法总结,哪些情况需要使用/deep/, :deep()等方式来穿透方法大全
  • 职业院校关于大数据、云计算和物联网传感器技术的结合与应用探讨
  • Ansys Zemax | 手机镜头设计 - 第 4 部分:用LS-DYNA进行冲击性能分析
  • 淘宝商品详情API接口Java GET调用指南
  • 【鉴权】深入解析OAuth 2.0:访问令牌与刷新令牌的安全管理