day27-python异常捕获

一 异常捕获

1.1.什么是异常 - 程序在执行过程中遇到错误得语法导致程序崩溃。

1.2.什么是异常捕获 - 通过异常捕获的程序让本身会异常得代码能够继续执行。

age = int(input('请输入年龄(0~150):'))
print('年龄:', age)
当年龄值为符号是就会报错

1.3.怎么捕获异常

1.3.1 语法一:(捕获代码段1中所有的异常)

try:
代码段1
except:
代码段2

说明:
try、except - 关键字,固定写法
代码段1 - 需要捕获异常的代码段
代码段2 - 捕获到异常后需要执行的代码段

执行过程:
先执行代码段1,如果执行过程中出现了异常(不会再执行出现了异常代码后面的代码),程序不崩溃,直接执行代码段2,然后接着执行后续其他语句。

try:
    age = int(input('请输入年龄(0~150):'))
    print(age)
except:
    print('请输入正确的年龄')

1.3.2 语法二:(捕获代码1中的指定异常)

try:
代码段1
except 异常类型:
代码段2

说明:
异常类型 - 类(必须是Exception类的子类(系统提供的错误类型:KeyError、IndexError、TypeError;自定义错误类型)

执行过程:
先执行代码段1,执行过程中如果出现异常(不会执行出现异常代码之后的代码),就判断出现的异常类型和except后面的异常类型是否相等,如果相等程序不报错,直接执行代码段2,否则程序直接崩溃。

try:
    print([1, 2, 3][10])
    print('============')
    print({}['age'])
    print('+++++++')
except IndexError:
    print('出现异常')

1.3.3 方法三:(同时捕获代码段1中的多种异常,对不同的异常的处理相同)

try:
代码段1
except(异常类型1,异常类型2,…):
代码段2

1.3.4 方法四:(同时捕获代码段1中的多种异常,针对不同的异常做不同的处理)

try:
代码段1
except 异常类型1:
代码段11
except 异常类型2:
代码段22

1.4.finally

上面的4种捕获异常的结构的最后都可以添加一个finally语句:
try:
代码段1
except:
代码段2
finally:
代码段3

不管需要捕获异常的代码段1出现了什么情况,finally后面的代码段3都会执行

try:
    print('abc')
    print([12121][20])
except TypeError:
    print('出现了异常')
finally:
    print('协议书吧')

二 继承

2.1.什么是继承

继承就是让子类直接拥有父类的属性和方法
子类 - 继承者
父类 - 被继承者
python中所有的类都是直接或间接继承自object类(object是python的基类)

2.2.继承的语法

class 类名(父类1,父类2,父类3…):
类的内容

定义类的时候如果没有写父类,父类就是object

class Person:
    num = 10
    def __init__(self):
        self.name = '阿康'
        self.age = 12
        self.gender = '🚺'

    def eat(self, food):
        print(self.name+'在吃'+food)

# 让Student(子类)继承Person(父类)
class Student(Person):
    pass

stu1 = Student()
print(stu1.name, stu1.gender)
stu1.eat('狗肉')
print(Student.num)

三 给子类添加属性和方法

3.1.添加属性和方法

  1. 添加方法和属性 - 直接在子类中添加
  2. 添加对象方法
    子类是通过继承父类的__init__方法来继承父类的对象属性,
    如果需要在子类中添加对象属性,需要在子类的__init__方法中通过super()去调用父类的__init__方法。

注意:在子类中可以通过super()去调用父类的任意方法

3. 2.类中方法的调用过程

通过类或者对象调用方法的时候,先看当前类中有没有这个方法,如果有,就直接调用,如果没有就找父类中有没有这个方法,如果父类中有,就调用父类的这个方法,如果没有就看父类的父类…以此类推,知道object都没有就报错。

class Person:
    # 类属性
    num = 100
    # 对象属性
    def __init__(self):
        self.name = '张三'
        self.age = 18
        self.gender = '男'

    # 方法
    def eat(self,food):
        print(f'{self.name}在吃{food}')

class Student(Person):
    flag = '认真学习'

    # 添加方法
    @staticmethod
    def study():
        print('好好学习天天向上')

    # 添加对象属性
    def __init__(self):
        # 调用当前类的父类的__init__方法
        super().__init__()
        self.study_id = '001'

print(Student.num,Student.flag)
stu1 = Student()
Student.study()
print(stu1.name)

四 自定义异常类型和抛出异常

4.1.抛出异常 - 主动让程序崩溃

语法:
raise 异常类型

说明:
raise - 关键字,固定写法
异常类型 - 类,必须是Exception的子类

age = int(input('请输入年龄(1~150):'))
if not 0 < age <= 140:
	raise ValueError

4.2.自定义异常 - 定义一个类继承Exception

class AgeError(Exception):
    description = '年龄错误!'

    # __str__的返回值必须是字符串,在异常类型中返回值就是抛出异常的提示信息
    def __str__(self):
        return AgeError.description
if not 0 < age <= 140:
    AgeError.description=f'{age}是不合法的年龄值'
    raise AgeError
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,异常处理是非常重要的一部分。当程序运行时如果出现错误,如果没有异常处理,程序就会崩溃。为了避免这种情况,Python提供了异常处理机制。 在Python中,异常处理语句使用 `try` 和 `except` 关键字来实现。`try` 语句块中包含可能会发生异常代码,如果这段代码出现了异常,则会跳转到 `except` 语句块中执行异常处理代码。 下面是一个简单的例子: ```python try: num = int(input("请输入一个整数:")) print(10/num) except ZeroDivisionError: print("除数不能为0") except ValueError: print("输入的不是整数") ``` 在上面的代码中,我们尝试将用户输入的字符串转换为整数,并将其用作除数计算 10/num。如果用户输入的是 0,则会触发 ZeroDivisionError 异常。如果用户输入的不是整数,则会触发 ValueError 异常。如果发生异常,则会跳转到对应的 except 语句块中执行处理代码。 除了可以指定具体的异常类型,也可以使用 `except Exception` 来捕获所有异常。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) ``` 在上面的代码中,如果发生任何异常,都会跳转到 `except` 语句块中执行处理代码,并将异常信息打印出来。 除了 `try` 和 `except`,还有 `finally` 关键字,它指定的代码块无论是否发生异常都会执行。例如: ```python try: num = int(input("请输入一个整数:")) print(10/num) except Exception as e: print("发生异常:", e) finally: print("程序执行完毕") ``` 在上面的代码中,无论是否发生异常,都会执行 `finally` 中的代码,即输出“程序执行完毕”。 总之,在Python中,异常处理是非常重要的一部分,它可以有效避免程序崩溃,提高程序的健壮性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值