【python】异常处理

        当python检测到一个错误时,解释器就无法继续运行了,反而出现了一些错误的提示,这就是所谓的异常。处理异常的方法就是用try语句来捕获异常避免程序终止。

目录

前言

正文

一、常见的报错类型

        1、语法错误

        2、逻辑错误

 二、基本异常处理

        1、基本语法:

        2、多异常捕获

                1)、多个except语句

                2)、 使用元组同时匹配多个异常

        3、万能异常 Exception 

 三、进阶异常处理

四、raise抛出异常

拓展

总结


前言

         Python中,程序执行过程中发生的错误或异常情况。当出现异常时,程序会停止执行并抛出一个异常对象,如果没有适当的处理机制,程序将会终止运行。为了避免直接停止程序,提高程序的容错性和可靠性,我们通常会使用try语句来处理异常。


正文

一、常见的报错类型

        常见的报错分为两种:

        1、语法错误

                这种错误在代码编写阶段就能被检测到,因为它违反了Python的语法规则。常见的语法错误包括拼写错误、缩进错误、语法结构错误等。

        2、逻辑错误

                这种错误在代码运行时不会引发异常,但导致程序的行为与预期不符。逻辑错误通常是由于程序员的错误理解或错误的实现导致的。例如,算法错误、变量赋值错误、条件判断错误等。

当出现错误时python解释器会抛出异常对象,并提示错误原因,以下是常见的异常信息与报错原因:

 二、基本异常处理

        1、基本语法:

try:
    print("被检测的语句")
except 检测报错类型 as e:
    # as是把捕获到的异常赋值给变量e 输出e得到具体的异常信息
    print(e)

         例如:输入两个整数进行除法运算

try:
    num1 = int(input('请输入整数:'))
    num2 = int(input('请输入整数:'))
    print("num1/num2=", num1 / num2)
except ValueError as e:  # 检测是否有ValueError错误 如果有则执行 except里面的语句
    # as是把捕获到的异常赋值给变量e 输出e得到具体的异常信息
    print('出现异常:', e)  # 捕获到异常则输出:出现异常:invalid literal for int() with base 10: '1.2'

        上述 代码中如果输入的不是整数则会输出e捕获到的异常信息,如果输入的正确则正常执行代码。

        即try对应的代码块里没有检测到异常,会跳过except继续执行后面的代码。

        如果try对应的代码块中出现了异常则执行except语句,先和except后指定的异常类型进行匹配,匹配成功捕获到异常输出对应的代码块。匹配失败则不能捕获

        2、多异常捕获

                通常在代码中可能一段代码出现多种异常,这样我们则可以使用多异常捕获来进行

                1)、多个except语句

                类似于if-else语句会一个一个进行判断,如果匹配成功则执行对应的except中的语句,直到最后。

try:
    num1 = int(input('请输入整数:'))
    num2 = int(input('请输入整数:'))
    print("num1/num2=", num1 / num2)
except ValueError as e:  # 检测是否有类型错误 如果有则执行 except里面的语句
    # as是把捕获到的异常赋值给变量e 输出e得到具体的异常信息
    print('输入的不是整型')
except ZeroDivisionError as e:  # 捕获除数为零的异常
    print('除数不能为零')
                2)、 使用元组同时匹配多个异常
try:
    num1 = int(input('请输入整数:'))
    num2 = int(input('请输入整数:'))
    print("num1/num2=", num1 / num2)
except (ValueError,ZeroDivisionError) as e:  # 检测是否出现元组中的错误 如果有则执行 except里面的语句
    # as是把捕获到的异常赋值给变量e 输出e得到具体的异常信息
    print('出现异常:', e)

        3、万能异常 Exception 

        可以用于匹配大多数异常,如果是语法错误则捕获不到。

try:
    num1 = int(input('请输入整数:'))
    num2 = int(input('请输入整数:'))
    print("num1/num2=", num1 / num2)
except Exception as e:  # 用于捕获大多数逻辑错误所引发的异常
    print('出现异常:', e)

         如以下输入于结果:

 三、进阶异常处理

try:
    print("被检测的语句")
except 检测报错类型 as e:
    # as是把捕获到的异常赋值给变量e 输出e得到具体的异常信息
    print(e)
else:
    print('没有捕获到异常执行')
finally:  # 主要用于资源回收的作用,如在对文件进行操作时,不管有没有报错都对文件进行关闭的操作
    print('一定会执行的语句')

代码:

try:
    num1 = int(input('请输入整数1:'))
    num2 = int(input('请输入整数2:'))
    print('num1/num2=', num1 / num2)
except Exception as e:
    # as是把捕获到的异常赋值给变量e 输出e得到具体的异常信息
    print(e)
else:
    print('没有捕获到异常执行')
finally:
    print('一定会执行的语句')

 运行结果:

没有异常的结果:

捕获到异常的结果:

四、raise抛出异常

        不符合python语法的由python解释器主动抛出异常

        而raise则是由程序员,自定义规则来抛出异常

        语法:

# 1、使用Exception创建异常对象
e = Exception('自定义异常')
# 2、使用raise抛出异常
raise e

        运行结果:触发报错,报错信息为,自己创建的异常对象内容

        但是抛出异常并不是为了让代码崩溃,而是为了拦截代码不符合预期的走向,所以常常于异常捕获一起使用,如:

def func():
    num = input('请输入6-10位密码:')
    if 6 > len(num) or len(num) > 10:
        raise Exception('密码位数错误')
    print('密码正确')


try:
    func()
except Exception as e:
    print('触发异常', e)

运行结果:  


拓展

        在python中for于while后面也是可以接else语句的。当else语句和循环链接,如果循环没有被break终止则会输出else里面的内容,否则不输出。

没有被break终止代码:

for i in range(10):
    print(i, end='\t')
else:
    print('\n循环已到最后')

 运行结果:

被break终止:

for i in range(10):
    if i == 4:
        break
    print(i, end='\t')
else:
    print('\n循环已到最后')

 运行结果:   


总结

        一个程序中出现报错,对于用户的体验是非常不好的,如果多使用异常处理则可以有效的避免这种情况,提高程序的容错性与可靠性。

  • 49
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值