1.异常的概述
list1 = [10, 20]
print(list1)
print("数字为%d" % "hello")
print("孤独加寂寞,总是 执行不到我...")
2.解释器处理异常的原理
当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"
3.处理异常的基本格式
"""
基本格式:
try:
可能会出现异常的代码块
except:
处理异常的代码块
执行流程:
如果 "可能会出现异常的代码块" 出现异常了,就执行 "处理异常的代码块"
否则就不执行.
这个格式可以处理任何一种异常.
"""
# list1 = [10, 20]
# print(list1)
#
# try:
# print("数字为%d" % "hello")
# print("hello python")
# except:
# print("变量应该为int类型的")
#
# print("孤独加寂寞,总是 执行不到我...")
print("读取一个文件...")
try:
f = open("a.txt", "r")
print(f.read())
f.close()
except :
print("文件a.txt不存在...")
print("读取结束...")
4.处理异常
print("开始执行...")
try:
print(10/0)
except ZeroDivisionError as ze:
print("在第5行的位置出现了如下错误:")
print(ze)
try:
f = open("a.txt", "r")
except FileNotFoundError as fnfe:
print(fnfe)
print("执行结束...")
5.else和finally的作用
"""
else语句的格式:
try:
可能会出现异常的代码块
except (异常类1,异常类2, ...) as 异常对象名:
处理异常的代码块
else:
没有出现异常时,才会执行的代码块
使用场景:
通常用来检测是否出现异常了.
"""
list1 = [10, 20]
try:
print(list1[2])
except:
print("索引越界...")
else:
print("没有异常,说明索引没有越界...")
"""
finally语句的格式:
try:
可能会出现异常的代码块
except (异常类1,异常类2, ...) as 异常对象名:
处理异常的代码块
finally:
不管是否出现异常,也不管是否捕获住了,一定会执行的代码块
使用场景:
做释放内存资源的事情
比如:
关闭文件
关闭数据库连接
"""
# list1 = [10, 20]
# try:
# print(list1[3])
# except FileNotFoundError:
# print("索引越界...")
# finally:
# print("牛逼大了,我一定会被执行...")
f = None
f = open("a.txt", "r")
try:
f.write("hello")
except Exception as e:
print(e)
print(10/0)
finally:
f.close()
6.异常的传递-异常的跨函数传递
"""
如果里面一层函数出现了异常,自己没有处理,那么异常对象就会传递到外面一层函数.
如果里面一层函数把异常处理掉了,那么异常对象就不会向外传递了.
"""
def func1():
print("func1 开始执行....")
# try:
# print(10/0)
# except Exception as e:
# print(e)
print(10 / 0)
print("func1 结束了....")
def func2():
print("func2 开始执行....")
# try:
# func1()
# except Exception as e:
# print(e)
func1()
print("func2 结束了....")
try:
func2()
except Exception as e:
print(e)
print("我是后续的代码...")
7.自定义异常类
8.异常处理中使用raise抛出自定义异常
"""
自定义异常类的原因:
python解释器自带的异常类不能满足需要.
自定义异常类的步骤:
1.定义一个类,继承一个 异常类;
2.在这个类中 添加一个 __init__方法;
抛出异常对象的步骤:
1.创建一个异常类的对象
2.使用raise关键字把对象向外抛出
python解释器不会自动创建 自定义异常类 的对象, 需要自己创建;
python解释器不会自动 抛出 自定义异常类 的对象,需要自己使用raise抛出;
"""
# 1.定义一个类,继承一个 异常类;
class AgeError(Exception):
# 2.在这个类中 添加一个 __init__方法;
def __init__(self, msg):
self.msg = msg
class Student:
def __init__(self, name, age, gender):
= name
self.__age = age
self.gender = gender
def set_age(self, age):
try:
if 0 <= age < 150:
self.__age = age
else:
# 抛出年龄不合法的异常
# 1.创建一个异常类的对象
# 2.使用raise关键字把对象向外抛出
raise AgeError("年龄必须在0-150之间...")
except AgeError as ae:
print(ae)
s = Student("波波", 40, "男")
s.set_age(50)
print("来执行我哦....")