【Python基础018】在程序中怎么实现自定义抛出异常

        在上一节中,我们讲了如何对程序中的异常进行处理,但这是针对程序在运行过程中系统自动抛出的异常,而让程序被动的抛出异常在实践中也具有重要作用。

1、raise语句抛出异常

        raise 语句可以使用一个类(必须是 Exception 或者 Exception 类的子类)或异常对象抛出异常。如果使用类,系统会自动创建类的实例。具体语法如下:

raise [Exception [, args [, traceback]]]

        在语句中Exception是异常的类型(例如:NameError)参数标准异常中任一种,args是自己提供的异常参数。最后一个参数是可选的,如果存在,是跟踪异常对象。

        例如:

# 输出等级的方法,如果等级<1 则抛出异常

def typeTest(level):

    if type(level) != int:

        raise Exception('输入类型不符', level)

    print(f'您输入的是:{level}')



try:

    typeTest(1.2)

except Exception as e:

    print(e) # ('输入类型不符', 1.2)

        当输入不是整数时,程序则会运行raise语句,抛出异常,异常信息为('输入类型不符', 1.2),这个信息就是由自己来定义。

        当输入是整数时,程序则输出“您输入的是:1”

2、assert语句

        assert是python中的一个关键字,称为“断言”,使用assert语句同样可以引发异常。但与raise语句不同,当这个关键字后边的条件为假的时候,程序才会抛出AssertionError的异常。assert语句的语法格式如下:

assert condition

        如果condition为false,那么程序抛出AssertionError异常

        用法1

assert 1 == 2

        正如assert翻译的意思“断言”,当程序运行到某个节点的时候,就断定某个变量的值必然是什么,或者对象必然拥有某个属性等,简单说就是断定什么东西必然是什么,如果不是,就会抛出错误。

        用法2

class Account:

    def __ init__(self):

        self.balance = 0

    def cal(self, amount):

        assert amount > 0

        self.balance += amount



if __ name__ == '__ main__':

    a = Account()

    a.cal(-10)

        从上面代码可以看出,cal()方法的参数 amount 值必须大于零的,如果不满足条件就会报错。一般来说assert相当于在程序中置入了一个检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作。

3、自定义异常

        在 Python 中,可以通过继承 Exception 类来创建自己的异常称为自定义异常。异常类和其他的类并没有区别。最简单的自定义异常类就是一个空的 Exception 类的子类。语法格式如下:

class MyException(Exception):

        pass        

        下面通过继承 Exception 类来生成一个 SexException 类。如果给 Student 类的属性 sex赋值时候,如果不是“男”或者“女”就抛出自定义的 SexException。示例如下:

​
# 自定义异常

class SexException(Exception):

    def __ init__(self, msg):

        self.msg = msg

class Student:

    def __ init__(self, name):

        self.name = name

        # self.__sex = sex

    @ property

    def sex(self):

        return self.__sex

    @sex.setter

    def sex(self, sex):

        if sex == '男' or sex == '女':

            self.__sex = sex

        else:

            raise SexException('性别的参数值不正确,只能是男或者女')

    def __ str__(self):

        return '姓名:{0},性别:{1}'.format(self.name,self.__sex)


s1=Student('张三')

s1.sex = 'abc' #给 s1 的属性 sex 赋值,

print(s1)

​

【Python基础018】在程序中怎么实现自定义抛出异常_第1张图片

        从上面的代码中可以看出,对 sex 属性赋值时候有可能有异常,需要进行捕获异常。

  ​
#自定义异常

class SexException(Exception):

    def __ init__(self, msg):

        self.msg = msg

class Student:

    def __ init__(self,name):

        self.name=name

        # self.__sex=sex

    @property

    def sex(self):
    
        return self.__sex

    @sex.setter

    def sex(self,sex):

        if sex=='男' or sex=='女':

            self.__sex=sex

        else:

            raise SexException('性别的参数值不正确,只能是男或者女')

    def __ str__(self):

        return '姓名:{0},性别:{1}'.format(self.name,self.__sex)


s1=Student('张三')

try:

    s1.sex='abc' # 给 s1 的属性 sex 赋值,

    print(s1)

except Exception as e:

    print(e)

​

你可能感兴趣的:(Python基础,python,开发语言)