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

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日

相关文章

  • Sanic框架异常处理与中间件操作实例分析

    Sanic框架异常处理与中间件操作实例分析 异常处理 在Web开发中,异常处理是一项非常重要的工作。Sanic框架提供了多种方式来进行异常处理。 全局异常处理 通过装饰器在应用实例上注册一个全局异常处理器,可以处理整个应用的异常。下面是一个简单的例子: from sanic import Sanic from sanic.exceptions import …

    python 2023年5月13日
    00
  • python 在sql语句中使用%s,%d,%f说明

    Python中可以使用%s,%d,%f等占位符表示字符串、整数和浮点数,以便于在SQL语句中动态地插入传递的值。下面是详细讲解: 字符串占位符%s 在SQL语句中,可以使用%s占位符表示动态传递的字符串。在Python编程中,可以使用字符串拼接或格式化字符串的方式来动态生成SQL语句。例如: name = ‘Lucy’ age = 20 sql = &quo…

    python 2023年5月18日
    00
  • 解决Python 异常TypeError: cannot concatenate ‘str’ and ‘int’ obj…

    解决Python异常TypeError: cannot concatenate ‘str’ and ‘int’ objects 在Python中,当我们尝试将字符串和整数拼接在一起时,可能会出现以下异常: TypeError: cannot concatenate ‘str’ and ‘int’ objects 这是因为Python不允许将字符串和整数直接拼…

    python 2023年5月13日
    00
  • python如何使用contextvars模块源码分析

    下面是详细的Python如何使用contextvars模块源码分析攻略。 1. 翻阅文档 首先,我们需要查阅Python的官方文档,了解contextvars模块的基本用法和重要概念。同时,我们要熟悉与contextvars相关的其他模块和函数,如 asyncio, inspect 和 threading 等。 可以在 Python 官方文档中查阅 cont…

    python 2023年6月3日
    00
  • Python爬虫实现抓取电影网站信息并入库

    Python爬虫实现抓取电影网站信息并入库 1.准备工作 安装Python 安装必要的库:BeautifulSoup, requests, pymysql 2.获取目标网站数据 使用requests库,向目标网址发送get请求,获取网站源代码,然后使用BeautifulSoup库解析出需要的信息。 示例代码: import requests from bs4…

    python 2023年5月14日
    00
  • python接口自动化使用requests库发送http请求

    以下是关于Python接口自动化使用requests库发送HTTP请求的攻略: Python接口自动化使用requests库发送HTTP请求 在Python接口自动化中,使用requests库发送HTTP请求是非常常见的操作。以下是Python接口自动化使用requests库发送HTTP请求的攻略。 发送GET请求 使用requests库发送GET请求非常简…

    python 2023年5月14日
    00
  • python3常用的数据清洗方法(小结)

    Python3常用的数据清洗方法(小结) 数据清洗是数据分析工作中的重要一环,它指的是通过各种技巧和方法,将原始数据中的噪声和错误等无用信息去除,保留有用的数据信息,为后续的数据分析做好数据准备工作。本文将详细讲解Python3中常用的数据清洗方法,方便您更好地处理和分析海量数据。 1. 删除重复数据 在实际数据分析中,数据中常常会存在重复信息。这时,我们可…

    python 2023年6月3日
    00
  • python3.4爬虫demo

    下面是“python3.4爬虫demo”的完整攻略: 1. 安装需要的库 为了实现web爬虫,我们需要安装两个Python库:requests和BeautifulSoup4。 你可以在命令行中使用pip安装它们,命令如下: pip install requests pip install beautifulsoup4 2. 理解Requests库 Reque…

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