异常
1.定义:运行时检测到的错误。
2.现象:当异常发生时,程序不会再向下执行,而转到函数的调用语句。
3.常见异常类型:
-- 名称异常(NameError):变量未定义。
-- 类型异常(TypeError):不同类型数据进行运算。
-- 索引异常(IndexError):超出索引范围。
-- 属性异常(AttributeError):对象没有对应名称的属性。
-- 键异常(KeyError):没有对应名称的键。
-- 未实现异常(NotImplementedError):尚未实现的方法。
-- 模块异常(ImportError):无法引入模块或包
-- 输入输出异常(IOErroe):输入输出异常
-- 语法异常(SyntaxError Python):代码逻辑语法出错,不能执行
-- 异常基类Exception
处理
1.语法:
try:
可能触发异常的语句
except 错误类型1 [as 变量1]:
处理语句1
except 错误类型2 [as 变量2]:
处理语句2
except Exception [as 变量3]:
不是以上错误类型的处理语句
else:
未发生异常的语句
finally:
无论是否发生异常的语句
2.作用:将程序由异常状态转为正常流程。
3.说明:
as 子句是用于绑定错误对象的变量,可以省略
except子句可以有一个或多个,用来捕获某种类型的错误。
else子句最多只能有一个。
finally子句最多只能有一个,如果没有except子句,必须存在。
如果异常没有被捕获到,会向上层(调用处)继续传递,直到程序终止运行。
案例1
def div_apple(apple_count):
"""
分苹果
"""
# ValueError
person_count = int(input("请输入人数:"))
# ZeroDivisionError
result = apple_count / person_count
print("每人分到%d个苹果" % result)
try:
div_apple(10)
except ValueError:
print("输入的数据应该是整数")
except ZeroDivisionError:
print("分母不能是0")
except Exception:
print("未知错误")
else:
# 没有异常时执行
print("分苹果成功喽")
案例2
#1.编写一个逐行读取文件内容并打印的函数,函数的唯一参数即文件访问路径。使用“try…except”语句为其处理可能出现的任何异常,且异常处理范围是整个函数,如果发生异常,则打印自定义的提示信息,并抛出异常的错误信息。
def readFile(path):
try:
f = open(path)
lines = f.readline()
for line in lines:
print(line)
f.close()
except BaseException:
print('出现错误')
raise
readFile(r"D:\abc.txt")
#2. 在第1题的基础上,为函数添加else子句,若调用函数未发生任何异常,则打印自定义信息提示用户函数调用成功。
def readFile(path):
try:
f = open(path)
lines = f.readline()
for line in lines:
print(line)
f.close()
except BaseException:
print('出现错误')
raise
else:
print("函数调用成功")
readFile(r"D:\abc.txt")
#3.在第1题与第2题的基础上,为函数添加finally语句,以确保文件能够被正常关闭,且打印自定义信息提示用户文件关闭成功。
def readFile(path):
try:
f = open(path)
lines = f.readline()
for line in lines:
print(line)
except BaseException:
print('出现错误')
raise
else:
print("函数调用成功")
finally:
f.close()
print("文件关闭成功")
readFile(r"D:\abc.txt")