Python异常
# 1. 什么是异常
当检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"。
# 2. 异常演示
# 运算符
# print(10/0)
# 文件异常
f = open('python.txt', 'r')
content = f.readlines()
print(content)
# 3. 异常捕获
基本语法:
try:
可能发生错误的代码
except(捕获):
如果出现异常执行的代码
try...except主要用于捕获代码运行时异常
示例:
try:
f = open('python.txt', 'r')
content = f.readline()
print(content, end='')
except:
f = open('python.txt', 'w', encoding='utf-8')
f.write('发生异常,执行except语句中的代码')
f.close()
# 4. 捕获指定异常
在以上示例代码中,except相当于捕获了所有异常,无论遇到什么错误都会自动执行except中封装的代码。但是有些情况下,我们向针对性的捕获异常,并执行相应的代码。
基本语法:
try:
可能遇到异常的代码
except 异常类型:
捕获到对应的错误以后,执行的代码
① 如果尝试执行的代码的异常类型和要捕获的异常类型不一致,则无法捕获异常。
② 一般try下方只放一行尝试执行的代码。
示例:捕获FileNotFoundError异常
try:
f = open('python.txt', 'r')
except FileNotFoundError as e:
print(e)
# 5. 同时捕获多个异常
try:
print(name)
# print(10/0)
except (NameError, ZeroDivisionError) as e:
print(e)
# 6. 捕获所有未知异常
无论我们在except后面定义多少个异常类型,实际应用中,也可能会出现无法捕获的未知异常。这个时候,我们考虑使用Exception异常类型捕获可能遇到的所有未知异常:
try:
可能遇到的错误代码
except Exception as e:
print(e)
示例:打印一个未定义变量,使用Exception异常类进行捕获
try:
print(name)
except Exception as e:
print(e)
# 7. 异常捕获中else语句
else语句:表示的是如果没有异常要执行的代码。
try:
print(1)
except Exception as e:
print(e)
else:
print('哈哈,真开森,没有遇到任何异常')
示例:
try:
f = open('python.txt', 'r')
except Exception as e:
print(e)
else:
content = f.readlines()
print(content, end='')
f.close()
# 8. 异常捕获中的finally语句
finally表示的是无论是否异常都要执行的代码,例如关闭文件、关闭数据库连接。
try:
f = open('python.txt', 'r')
except:
f = open('python.txt', 'w')
else:
print('哈哈,真开森,没有遇到任何异常')
finally:
print('关闭文件')
f.close()
# 9. 异常的综合示例
# ☆ 异常的传递
需求:
① 尝试只读方式打开python.txt文件,如果文件存在则读取文件内容,文件不存在则提示用户即可。
② 读取内容要求:尝试循环读取内容,读取过程中如果检测到用户意外终止程序,则except
捕获
③ 文件操作完毕后,要及时关闭文件,避免占用内存空间
import time
try:
f = open('python.txt', 'r')
try:
while True:
content = f.readline()
if len(content) == 0:
break
time.sleep(3)
print(content, end='')
except:
# Ctrl + C(终端里面,其代表终止程序的继续执行)
print('python.txt未全部读取完成,中断了...')
finally:
f.close()
except:
print('python.txt文件未找到...')
# ☆ raise抛出自定义异常
在Python中,抛出自定义异常的语法为raise 异常类对象
。
需求:密码长度不足,则报异常(用户输入密码,如果输入的长度不足6位,则报错,即抛出自定义异常,并捕获该异常)。
原生方法:
def input_password():
password = input('请输入您的密码,不少于6位:')
if len(password) < 6:
# 抛出异常
raise Exception('您的密码长度少于6位')
return
# 如果密码长度正常,则直接显示密码
print(password)
input_password()
上次更新: 2023/06/28, 19:28:04