第六章 Python面向对象 06-异常处理

异常处理

1. 异常处理的介绍

所谓“异常”,其实就是程序在运行过程中,由于某些逻辑问题而出现的不正常的情况。异常的出现会终止程序的运行。

例如:在使用int()将其他的数据类型转成整型的时候,如果我们要转的是一个非数字的字符串,可能就会出现这个问题。

​ int(“abc”)

常见的异常:

  • ValueError
  • TypeError
  • NameError
  • IndexError
  • KeyError
  • ZeroDivisionError

而“异常处理”就是我们将可能出现异常的代码,使用try代码块包含,使用except列出可能出现的异常进行捕获,为这种异常情况设置一个预备方案,以保证程序可以正常运行,不会中断。

2. 异常处理的语法

异常处理的流程:

  • 解释器逐行执行代码
  • 如果发现错误,解析错误类型,生成一个对应的异常对象,将异常抛出
  • 检查周围有没有处理这种类型的代码块
    • 如果周围有处理这种类型异常的代码块,执行对应的程序逻辑
    • 如果周围没有处理这种类型异常的代码块,中断程序

2.1. try-except

try:
    # 让用户在控制台输入数字,输入的可能不正确
    number = int(input("please input a number: "))
except ValueError as v:
    print("输入的不是数字!")

2.2. else

else用在try结构的后面,在try的代码段中没有异常出现的时候会执行

try:
    # 让用户在控制台输入数字,输入的可能不正确
    number = int(input("please input a number: "))
except ValueError as v:
    print("输入的不是数字!")
else:
    print("用户的输入没有问题")

2.3. finally

finally用在try结构的后面,无论try的代码段中有没有出现异常,finally代码段中的代码始终都会执行

try:
    # 让用户在控制台输入数字,输入的可能不正确
    number = int(input("please input a number: "))
except ValueError as v:
    print("输入的不是数字!")
finally:
    print("finally")

3. 异常抛出

3.1. 抛出系统异常

我们在设计某些函数的时候,有时候需要对外界传入的数据进行逻辑上的判断,对于判断结果不成立的数据,我们可以适当的抛出异常,让调用方必须要处理这样的问题,才能够继续使用这些功能。起到一个约束的作用。

抛出异常,其实就是实例化一个异常类的对象,然后使用raise关键字抛出,使其生效。

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        if 1 <= age <= 150:
            self.__age = age
        else:
            raise ValueError("年龄异常")


p = Person(19, 200)

3.2. 自定义异常

系统给我们提供了很多的异常类,但是这些异常类并不能够满足我们所有的需求。对于有些功能,在实现的时候我们希望能够对数据进行逻辑处理,处理结果不正确的,及时抛出异常,让调用方去处理。调用方在处理的时候,需要使用指定的异常类型来捕获。可是如果都是用到系统的异常类型的话,那么语义表达上面会有问题。因此

自定义异常类,只需要设计一个类去继承Exception类即可。

# 自定义异常类
class AgeError(Exception):
    pass


class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    @property
    def age(self):
        return self.__age

    @age.setter
    def age(self, age):
        if 1 <= age <= 150:
            self.__age = age
        else:
            # 抛出自定义的异常
            raise AgeError("年龄异常")


try:
	p = Person(19, 200)
except AgeError as a:
    print("年龄有问题,需要重新实例化对象")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值