注册 登录
Python基础教程

第一章: 环境搭建,安装Python

第二章: 挑选一款趁手的IDE

第三章: 计算机基础知识

第四章: 命令行基础知识

第五章: 从全局把握Python

第六章: Python语言基础

第七章: Python流程控制

第八章: Python数据类型与运算

第九章: Python字符串类型

第十章: Python列表类型

第十一章: Python元祖类型

第十二章: Python字典类型

第十三章: Python集合类型

第十四章: Python函数处理

第十五章: Python文件处理

第十六章: Python面向对象

第十七章: Python异常处理

第十八章: Python模块处理

第十九章: Python项目实战

首页 > Python基础教程 > 第十七章: Python异常处理 > 17.3节:自定义异常类型

17.3节:自定义异常类型

薯条老师 2020-05-26 08:06:52 359578 0

编辑 收藏

教程引言:

系统地讲解计算机基础知识,Python的基础知识, 高级知识。关注微信公众号[薯条编程],领取该教程的PDF电子书:《Python零基础入门指南》。

17.3.1 Python中的标准异常

Python预定义了一系列标准异常,这些标准异常的异常名称以Error作为后缀。Python中的异常主要有:语法异常,类型异常,名称异常,值异常,数学异常,系统异常,运行时异常。

对Python中的常用标准异常不是很熟悉的同学,可以复习17.1节中的内容 。

在Python中一切皆对象,异常也是一种对象。我们可以利用面向对象的设计方法,从Python的异常类型中进行继承、扩展,自定义一个新的异常。

17.3.2 自定义异常类型

Python中的标准异常名称以Error作为后缀,我们在自定义异常时,也应该遵循这样的命名规范,以保持统一。现在来写一个简单的代码实例,从Exception中进行继承。从某一个异常类型进行继承时,需要先了解该异常类型的构造函数以及属性、方法,以便进行扩展。对于Exception类型的定义信息,可以在交互模式中执行help(IndexError)来进行查找。
>>> help(Exception)
Help on class Exception in module builtins:
class Exception(BaseException)
|  Common base class for all non-exit exceptions.
|
|  Method resolution order:
|      Exception
|      BaseException
|      object
|
|  Methods defined here:
|
|  __init__(self, /, *args, **kwargs)
|      Initialize self.  See help(type(self)) for accurate signature.
|
|  ----------------------------------------------------------------------

从help的输出可知,Exception继承于BaseException, __init__方法中声明的是可变参数。关于Exception的属性和方法,可以执行dir(Exception)来进行查找:

>>> dir(Exception)
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__suppress_context__', '__traceback__', 'args', 'with_traceback']

代码实例:

# __desc__ = 对Exception进行继承
 
"""
Python中的标准异常,它们都直接或间接地继承于Exception类型
"""
 
# 定义一个简单的ArgumentError类,用来表示与参数相关的异常
 
class ArgumentError(Exception):
    # 定义一个类属性__MESSAGE用来存储错误码和错误描述
    __MESSAGE = {
    0:"ok",
     1: "data type mismatching"
   }
 
  
    def __init__(self, code, *args, **kwargs):
        self.__code = code if code in self.__MESSAGE else -1
        self.__message = self.__MESSAGE[self.__code] if code in self.__MESSAGE else "argument error"
        super().__init__()
 
    # 自定义一个error方法,用来返回错误码和错误描述
    def error(self):
        return self.__code, self.__message
 
 
def calc_max(*args):
    the_max = 0
   
    for _ in args:
        if not isinstance(_,(int, float)):
            # 在实际开发中应避免硬编码,可以定义一个类类型,专门用来存储错误码
            raise ArgumentError(1)

        the_max = _ if _ > the_max else the_max
    return the_max
 
if __name__ == "__main__":
    try:
        print("max:{}".format(calc_max(5,6,7,1,3,9)))
 
        # 在下面的calc_max中会抛出异常
        print("max:{}".format(calc_max(5,6,7,1,3,9,"33")))
    except ArgumentError as e:
        code, message = e.error()
        print("code:{} message:{}".format(code, message))
 
"""
程序的输出为:
max:9
code:1 message:data type mismatching
"""

17.3.3 知识要点

(1) Python预定义了一系列标准异常,这些标准异常的异常名称以Error作为后缀。Python中的异常主要有:语法异常,类型异常,名称异常,值异常,数学异常,系统异常,运行时异常。

17.3.4 高薪就业班

(1) Python后端工程师高薪就业班,月薪8K-15K,免费领取课程大纲
(2) Python爬虫工程师高薪就业班,年薪十万,免费领取课程大纲
(3) Java后端开发工程师高薪就业班,月薪8K-20K, 免费领取课程大纲
(4) Python大数据工程师就业班,月薪12K-25K,免费领取课程大纲

扫码免费领取学习资料:


欢迎 发表评论:

请登录

忘记密码我要注册

注册账号

已有账号?请登录