Python 自定义异常
来源:互联网 发布:手机底部导航栏源码 编辑:程序博客网 时间:2024/05/29 03:21
简述
Python 提供了丰富的标准异常,这些异常非常灵活,我们甚至可以根据需要进行修改以满足特定需求,所以应该尽可能地使用它们。
然而,在实际编程中,你会发现有时标准异常不够用,这就需要我们创建自定义异常来满足特殊的业务场景。
- 简述
- 自定义异常
- 实际案例
版权所有:一去丶二三里,转载请注明出处:http://blog.csdn.net/liang19890820
自定义异常
创建自定义异常,可以通过创建一个新类来实现,这个新类必须从 Exception
类直接或间接地派生出来。
注意: 大多数标准异常也是 Exception
类的派生形式,可参见:内置异常的层次结构。
例如,创建一个派生自 Exception
的自定义异常:
>>> class CustomException(Exception):... pass...
与其他异常一样,可以使用 raise
语句来引发此异常:
>>> raise CustomExceptionTraceback (most recent call last):...__main__.CustomException>>> >>> raise CustomException("A custom exception occurred")Traceback (most recent call last):...__main__.CustomException: A custom exception occurred
实现异常类,比较好的做法是:将所有自定义异常放在一个单独的文件中(例如:exceptions.py
或 errors.py
),许多标准模块也都是这样做的。
既然自定义异常是类,那么它必然可以实现一个普通类能做的所有事情。但一般而言,应该尽量保持简单、简洁。大多数实现都是声明一个自定义基类,并从这个基类派生出其他的(由程序引发的)异常类。这是 Python 中实现自定义异常的标准方法,但并不仅限于这种方式。
实际案例
基于此,再完善下 Python 异常处理 中关于薪资的问题。输入一个数字,直到正确地猜测到薪资为止。为了解决这个问题,提供一些猜测大于/小于的提示。
定义了一个名为 CustomException
的基类,其他两个异常(ValueTooSmallException
和 ValueTooLargeException
)都派生自该类,将它们放入 exceptions.py
模块中:
class CustomException(Exception): """Base class for other exceptions""" passclass ValueTooSmallException(CustomException): """Raised when the input value is too small""" passclass ValueTooLargeException(CustomException): """Raised when the input value is too large""" pass
然后,编写一个猜薪资的主程序 - guess_salary.py
:
from exceptions import *# 需要猜测的薪资salary = 10000while True: try: i_salary = int(input("Please enter the salary: ")) if i_salary < salary: raise ValueTooSmallException elif i_salary > salary: raise ValueTooLargeException except ValueTooSmallException: print("Too small, try again!\n") except ValueTooLargeException: print("Too large, try again!\n") except: print("It's not a number!\n") else: print("Congratulations!") break
考虑到程序的健壮性,除了自定义异常之外,我们还捕获了其他异常。这样以来,即使输入的内容无法转换为 int,程序也不至于出错。
运行主程序,并输入相关值:
Please enter the salary: abc
It’s not a number!Please enter the salary: 5000
Too small, try again!Please enter the salary: 20000
Too large, try again!Please enter the salary: 10000
Congratulations!
完美,一切正如我们所愿!
- Python自定义异常
- Python 自定义异常
- Python-自定义异常
- Python:自定义异常类
- python 自定义异常
- Python如何自定义异常
- python自定义异常
- Python 自定义异常
- Python 用户自定义异常
- python之自定义异常
- python自定义异常
- Python学习--异常处理,自定义异常类
- python 自定义异常和异常捕捉
- Python 练习代码 -- 异常,抛异常, 自定义异常
- Python 自定义异常类,主动捕获异常,主动抛出异常
- Python 实现简单的自定义异常类型
- Python实例浅谈之二自定义异常
- python 自定义异常的定义和代码
- java通过poi读取excel中的日期类型数据或自定义类型日期
- 【LeetCode】596、Classes More Than 5 Students
- java list排序
- java Graphics初探
- seh
- Python 自定义异常
- 使用prototype自定义数组方法
- HTML标签
- 基于ALSA的WAV播放和录音程序
- spring--xml配置方式,bean实例化的方式
- Windows 7关闭445端口
- TCP/IP学习笔记(12)-TCP的超时与重传
- HTML特殊字符编码对照表
- java 2 笔记