异常介绍和使用方式

本文介绍了Python中的异常处理机制,包括异常的简介、传播和异常对象的概念。通过try-except语句,程序员可以捕获并处理运行时可能出现的错误,避免程序因异常而终止。示例代码展示了如何处理除法运算、输入验证等常见异常,以及在没有错误发生时执行特定代码的用法。此外,还演示了如何在函数中无声地处理错误,例如在找不到文件时仅使用pass关键字忽略异常。
摘要由CSDN通过智能技术生成

异常简介

• 程序在运行过程中可能会出现一些错误。比如: 使用了不存在的索引,两个不同类型的数据相加…这些错误我们称之为异常
• 处理异常 程序运行时出现异常,目的并不是让我们的程序直接终止!Python是希望在出现异常时,我们可以编写代码来对异常进行处理

异常的传播

• 当在函数中出现异常时,如果在函数中对异常进行了处理,则异常不会在进行传播。如果函数中没有对异常进行处理,则异常会继续向函数调用传播。如果函数调用处处理了异常,则不再传播异常,如果没有处理则继续向调用处传播。直到传递到全局作用域(主模块)如果依然没有处理,则程序终止,并显示异常信息。
• 当程序运行过程中出现异常以后,所有异常信息会保存到一个异常对象中。而异常传播时,实际上就是异常对象抛给了调用处

异常对象

try语句
    try:
        代码块(可能出现错误的语句)
    except 异常类型 as 异常名:
        代码块(出现错误以后的处理方式)
    except 异常类型 as 异常名:
        代码块(出现错误以后的处理方式)
    except 异常类型 as 异常名:
        代码块(出现错误以后的处理方式)
    ....
    else:
        代码块(没出错时要执行的语句)
        
    finally:
        代码块(是否出错该代码块都会执行)
     try是必须的 else有没有都可以
     exceptfinally至少有一个
  • 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)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值