程序在执行过程因为遇到错误的语法导致程序崩溃
通过异常捕获的程序让本身会异常的代码能够继续执行
"""
(1)语法一 -- 捕获代码段1中所有的异常
try:
代码段1
except:
代码的2
说明:
try,except -- 关键字,固定写法
代码段1 -- 需要捕获异常的代码段
代码段2 -- 捕获到异常后会执行的代码
执行过程:先执行代码段1,如果执行过程中出现了异常,程序不崩溃,直接执行代码段2,然后接着执行后续其他语句
"""
"""
(2)语法二 -- 捕获代码段1中的指定异常
try:
代码段1
except 异常类型:
代码段2
说明:
try,except -- 关键字,固定写法
代码段1 -- 需要捕获异常的代码段
异常类型 -- 类,必须是Exception类的子类(系统提供的错误类型:KeyError,IndexError,TypeError,自定义错误类型)
代码段2 -- 捕获到异常后会执行的代码
执行过程:先执行代码段1,如果执行过程中出现了异常就判断
出现的异常类型和except后面的异常类型是否相等,
如果相等程序不报错,直接执行代码段,否则程序直接崩溃
"""
"""
(3)语法三 -- 同时捕获代码段1中的多种异常,对不同的异常的处理相同
try:
代码段1
except (异常类型1,异常类型2,异常类型3....):
代码段2
(4)语法四 -- 同时捕获代码段1中的多种异常,针对不同的异常做不同的处理
try:
代码段1
except 异常类型1:
代码段11
except 异常类型2:
代码段22
"""
"""
上面的4种捕获异常的结构的最后都可以添加一个finally语句:
try:
代码段1
except:
代码段2
finally:
代码段3
不管需要捕获异常的代码段1出现了什么情况,finally后面的代码段3都会执行
"""
继承就是让子类直接拥有父类的属性和方法
子类 – 继承者
父类 – 被继承者
python中所有的类都是直接或者间接继承自object类(object是python的基类)
class 类名(父类):
类的内容
定义类的时候如果没有写父类,父类就是object
class Person:
num = 100
def __init__(self):
self.name = "cc"
self.age = 22
self.gender = "女"
def eat(self, food):
print(self.name + "在吃" + food)
@classmethod
def Destruction(cls):
print("破坏")
class Student(Person):
pass
stu1 = Student()
print(stu1.name, stu1.age, stu1.gender)
stu1.eat("火锅")
Student.Destruction()
(1)添加方法和类属性 – 直接在子类中添加
(2)添加对象属性
子类是通过继承父类的__init__方法来继承父类的对象方法
如果要在子类中添加对象属性,需要在子类的__init__方法中通过super()去调用父类的__init__方法
注意:在子类中可以通过super()去调用父类的任意方法
通过类或者对象调用方法的时候,先看当前类中有没有这个方法,如果有直接调用;没有就看父类中有没有这个方法
如果有调用父类的方法;如果没有就看父类的父类有没有,…以此类推,如果找到object都没有这个方法才报错
class Person:
# 类属性
num = 100
# 对象属性
def __init__(self):
self.name = "cc"
self.age = 22
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()
stu1.eat("火锅")
Student.Study()
print(stu1.name, stu1.age, stu1.gender, stu1.study_id)
def eat():
print("动物要吃东西")
class Animal:
def __init__(self, color, age=1, gender="雄性"):
self.age = age
self.gender = gender
self.color = color
class Dog(Animal):
def __init__(self, name, type, color, age=1, gender="雄性"):
super().__init__(color, age, gender)
self.name = name
self.type = type
def __repr__(self):
return f"<{str(self.__dict__)[1:-1]}>"
dog = Dog("cc", "拉布拉多", "黄色")
print(dog.name, dog.type, dog.color)
print(dog)
class Person:
def __init__(self, name, age=22, gender="女"):
self.name = name
self.age = age
self.gender = gender
class Teacher(Person):
def __init__(self, name, tea_id, age, title="副教授", job_age=2):
super().__init__(name, age)
self.tea_id = tea_id
self.title = title
self.job_age = job_age
self.subject = "Python"
t1 = Teacher("cc", "001", 18)
print(t1.__dict__)
语法
raise 异常类型
说明
raise – 关键字,固定写法
异常类型 – 类,必须是Exception的子类
age = int(input("输入年龄(0~150):"))
class AgeError(Exception):
description = f"{age}是不合法的年龄值"
# __str___的返回值必须是字符串,在异常类型中返回值就是抛出异常的时候的提示信息
def __str__(self):
return AgeError.description
if not 0 <= age <= 150:
raise AgeError
# 给错误分数写一个异常类型,要求分数的范围是0~100,
# 如果输入的分数超出范围就抛出分数错误的异常,
# 并提示正确的分数范围
grade = int(input("输入分数(0~150):"))
class GradesError(Exception):
description = f"{grade}不是正确的分数值"
def __str__(self):
return GradesError.description
if not 0 <= grade <= 150:
raise GradesError