异常简介
• 程序在运行过程中可能会出现一些错误。比如: 使用了不存在的索引,两个不同类型的数据相加…这些错误我们称之为异常
• 处理异常 程序运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理
异常的传播
• 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会在进行传播。如果函数中没有对异常进行处理,则异常会继续向函数调用传播。如果函数调用处处理了异常,则不再传播异常,如果没有处理则继续向调用处传播。直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并显示异常信息。
• 当程序运行过程中出现异常以后,所有异常信息会保存到一个异常对象中。而异常传播时,实际上就是异常对象抛给了调用处
异常对象
try语句
try:
代码块(可能出现错误的语句)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
except 异常类型 as 异常名:
代码块(出现错误以后的处理方式)
....
else:
代码块(没出错时要执行的语句)
finally:
代码块(是否出错该代码块都会执行)
try是必须的 else有没有都可以
except和finally至少有一个
- try…except语句:在捕获异常时,如果需要同时处理多个异常也可以采用下面的代码实现:即在except语句后面使用一对小括号将可能出现的异常名称括起来,多个异常名称之间使用逗号分隔。如果想要显示具体的出错原因,那么再加上as指定一个别名。
- 捕获异常
try:
division() # 调用分苹果的函数
except (ValueError,ZeroDivisionError ) as e: # 处理异常
print("出错了,原因是:",e) # 显示出错原因
try…except…else语句
在原来try…except语句的基础上再添加一个else子句,用于指定当try语句块中没有发现异常时要执行的语句块。
该语句块中的内容当try语句中发现异常时,将不被执行。
示例1:除法计算器,防止崩溃
print('按q键停止')
while True:
m=input('请输入被除数:')
if m =='q':
break
s=input("请输入除数:")
try:
sum=int(m)/int(s)
print(sum)
except:
print('除数不可为零,你个笨蛋,哈哈哈')
示例2:捕获不是数字引发错误,持续输出
while True:
#捕获不是数字引发错误,持续输出
fistnumber=input('请输入第一个数字:')
secondnumber=input('请输入第二个数字:')
try:
sum=int(fistnumber)+int(secondnumber)
except :
print('请输入数字')
else:
print(sum)
示例3:失败一声不吭
#失败一声不吭
def count_words(filename):
try:
with open(filename)as f:
content=f.read()
except:
# mes="找不到文件"+filename
# print(mes)
pass
else:
words=content.split()
num_words=len(words)
print('文件'+filename+'包含单词'+str(num_words))
filenames=['cat.txt','dog.txt','xiaoji.txt']
for filename in filenames:
count_words(filename)