python 自定义异常和主动抛出异常(raise)的操作

yizhihongxing

Python 自定义异常

Python默认提供了很多异常类型,但在实际开发中,你需要根据具体的业务需要自定义异常类型。自定义异常的方法非常简单,只需从内置的Exception类派生一个新类即可。

class MyException(Exception):
    pass

raise MyException("我的异常")

以上代码中,我们创建了一个新的异常类MyException(),它是从内置的Exception类派生的。当程序执行到raise MyException("我的异常")这行代码时,就会抛出一个MyException的异常,其中"MyException"是异常的描述文本。

自定义异常通常会包含一些额外的信息来说明异常的原因。我们可以在派生的异常类中添加初始化方法,并使用super()调用基类的__init__()方法来传递信息。

class BalanceNotEnough(Exception):
    def __init__(self, account, balance, withdraw):
        self.account = account
        self.balance = balance
        self.withdraw = withdraw

    def __str__(self):
        return f"账户{self.account}余额不足,当前余额为{self.balance},需要{self.withdraw}。"

以上代码中,我们创建了一个新的异常类BalanceNotEnough,它接收三个参数:账户名、当前余额和需要提现的金额。初始化方法在自定义的异常类中非常常见,通过它,我们可以将一些额外的信息储存到异常对象中。在以上的例子中,我们还重载了父类的__str__()方法,用于返回包含了可读性信息的字符串。

主动抛出异常(raise)

在Python中,我们可以通过使用raise语句,来主动触发异常的抛出。raise语句需要接收一个异常对象,这个对象可以是一个内置的异常类,也可以是我们自己定义的异常类。

def sqrt(n):
    if n < 0:
        raise ValueError("参数n不能小于0")
    return math.sqrt(n)

print(sqrt(9))
print(sqrt(-1))

以上代码中,我们定义了一个函数sqrt(),它接收一个参数n,并计算n的平方根。如果n小于0,则会抛出一个ValueError异常,包含了描述该异常的文本信息。在代码中,我们分别调用sqrt(9)sqrt(-1),因为sqrt(-1)会触发异常的抛出,因此函数在此处结束运行,而后面的print语句则不会被执行。

另一个示例,自定义异常并在函数中抛出:

class LoginFailException(Exception):
    def __init__(self, reason):
        self.reason = reason

    def __str__(self):
        return f"登录失败:{self.reason}"

def login(username, password):
    if username == "admin" and password == "123456":
        print("登录成功!")
    else:
        raise LoginFailException("用户名或密码错误")

try:
    login("admin", "1234567")
except LoginFailException as e:
    print(e)

以上代码中,我们定义了一个自定义异常类LoginFailException,用于描述登录失败的情况。在login()函数中,如果用户名和密码匹配,就会进行登录成功的相关操作;否则就会抛出一个LoginFailException异常,包含描述该异常的文本信息。在try块中,我们调用函数login(),如果函数内部会抛出异常,则会被except块中的代码捕获并被输出到控制台上。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python 自定义异常和主动抛出异常(raise)的操作 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • 浅述python2与python3的简单区别

    讲解“浅述Python2与Python3的简单区别”这个问题,我主要从以下三个方面来讲解: 语法的不同 库的不同 其他差异 1. 语法的不同 Python 3相对于Python 2在语法上做了一些改进: print语句:Python 2中使用”print”语句来输出内容,而在Python 3中,这个语句被改成了一个函数,需要用括号将内容包裹起来。例如:pri…

    python 2023年5月20日
    00
  • python中os操作文件及文件路径实例汇总

    让我来为您详细讲解“Python中OS操作文件及文件路径实例汇总”的完整攻略。 简介 在Python中,操作文件及文件路径是比较常见的情景,而OS是Python内置模块之一,提供了许多操作文件及文件路径的方法。在本攻略中,我们会对OS模块进行简单介绍以及详细讲解OS中常用的文件及文件路径操作方法,并提供代码示例帮助大家理解掌握。 OS模块简介 OS模块是Py…

    python 2023年6月2日
    00
  • Python抓取网页图片难点分析

    Python抓取网页图片难点分析 1. 资源定位 要抓取网页中的图片,首先需要定位图片所在的资源路径,通常包括以下两种方式: 1.1 直接获取源代码中的图片链接 在页面源代码中,图片资源通常是通过<img>标签引用的,其路径可以通过标签的src属性获取。通过requests库获取网页源代码并对其进行解析,即可获取页面中所有图片的资源路径。 示例代…

    python 2023年6月3日
    00
  • python基础之reverse和reversed函数的介绍及使用

    Python基础之reverse和reversed函数的介绍及使用 在 Python 中,有两个与列表倒序相关的函数:reverse() 和 reversed()。虽然两者的名称相似,但它们的使用方法和返回结果却有所不同。 reverse() 函数 reverse() 函数是针对列表本身进行操作,它将列表中的元素顺序进行反转,使得列表成为倒序的形式。例如: …

    python 2023年5月14日
    00
  • pytest实现多进程与多线程运行超好用的插件

    关于pytest实现多进程与多线程运行超好用的插件,一般需要借助pytest-xdist和pytest-parallel插件来实现。下面将详细讲解完整攻略,包括插件安装、配置和使用等。 1. 安装pytest-xdist和pytest-parallel插件 在终端中输入以下命令,安装pytest-xdist和pytest-parallel插件: pip in…

    python 2023年5月19日
    00
  • 详解python编程slice与indices函数用法示例

    下面是详解Python编程Slice与indices函数用法示例的攻略: Slice的概念 在Python编程中,Slice是一种用来提取数据序列片段的方法。我们可以使用Slice提取一个列表或字符串中的一部分数据。使用Slice需要指定起始索引和结束索引,语法格式如下: seq[start:end] 其中,起始索引包含在Slice中,而结束索引不包含在Sl…

    python 2023年6月3日
    00
  • 浅谈python中的数字类型与处理工具

    浅谈Python中的数字类型与处理工具 Python 是一种解释型语言,通过该语言,我们可以使用多种数据类型来进行数字处理。在使用 Python 进行数字处理时,主要涉及到以下几个方面: 数字类型 数字处理工具 与数字类型相关的库 数字类型 Python中数字类型包括整数、浮点数、复数三种。 整数 Python 中的整数没有大小限制,可以处理任意大小的整数,…

    python 2023年5月13日
    00
  • Pytorch中的数据集划分&正则化方法

    以下是“PyTorch中的数据集划分&正则化方法”的完整攻略: 一、问题描述 在PyTorch中,数据集划分和正则化是深度学习中非常重要的步骤。本文将详细讲解PyTorch中的数据集划分和正则化方法,并提供两个示例说明。 二、解决方案 2.1 数据集划分 在PyTorch中,我们可以使用torch.utils.data.random_split函数将…

    python 2023年5月14日
    00
合作推广
合作推广
分享本页
返回顶部