基础 | 彻底搞懂Python异常处理:try-except-else-finally

大家好,我是欧K。

异常是我们学习和生活中的常客,在编程时遇到的异常我们俗称为“Bug”,Bug的预防和处理关乎到代码质量的高低,今天我总结了Python中try-except-else-finally各种异常的处理逻辑,希望对你有所帮助。

什么是异常,什么是异常程序?

异常:程序正常执行过程中出现的不正常的情况,该情况影响了程序的正常执行。

异常程序:是指程序执行的非法指令,比如常见的非法操作码,地址越界,算术溢出等,异常程序的出现一般有两种情况:

  • 程序设计时的编程错误或程序运行时的硬件错误
  • 精心设计地入侵系统程序(病毒)

异常处理

异常处理是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况,即超出程序正常执行流程的某些特殊条件。
Python提供了两个非常重要的功能来处理程序在运行中出现的异常和错误。经常使用的是try…except语句,拓展一下就是try-except-else-finally,另一个是断言(这个后面再讲)。

  • try:正常情况下,程序计划执行的语句。
  • except:程序异常是执行的语句。
  • else:程序无异常即try段代码正常执行后会执行该语句。
  • finally:不管有没有异常,都会执行的语句。

语法:
name为异常类型,可指定可不指定:

try:
    # 代码段1
    pass
except name:
    # 代码段2
    pass
else:
    # 代码段3
    pass
finally:
    # 代码段4
    pass

实例1(无return)

1.1 除数为0.0,不使用try的话程序会报错直接退出

a = 5.0 / 0.0
print('输出:我是try')
# ZeroDivisionError: float division by zero

try:
    a = 5.0 / 0.0
    print('输出:我是try')
except :
    print('输出:我是except')
# 输出:我是except

加上else和finally,执行逻辑:try–>except–>finally

try :
    a = 5.0 / 0.0
    print('输出:我是try')
except :
    print('输出:我是except')
else :
    print('输出:我是else')
finally :
    print('输出:finally')
    
# 输出:我是except
# 输出:finally

1.2 除数为1.0,即正常程序:

执行逻辑:try–>else–>finally

try :
    a = 5.0 / 1.0
    print('输出:我是try')
except :
    print('输出:我是except')
else :
    print('输出:我是else')
finally :
    print('输出:finally')

# 输出:我是try
# 输出:我是else
# 输出:finally

实例2(有return,较为复杂,需仔细)

2.1 除数为0.0

2.1.1 执行逻辑:try–>except–>finally

程序在except内部虽然已经return了,但是finally依然会被执行,此时finally亦有return,则输出为finally代码段的返回值。

def test():
    try :
        a = 5.0 / 0.0
        print('输出:我是try')
        return 0
    except :
        print('输出:我是except')
        return 1
    else :
        print('输出:我是else')
        return 2
    finally :
        print('输出:finally')
        return 3
print('test: ',test())
# 输出:我是except
# 输出:finally
# test: 3

2.1.2 执行逻辑:try–>except–>finally,返回except代码段返回值

程序在except内部虽然已经return了,但是finally依然会被执行,此时finally内部没有return,则最终输出except代码段的返回值。

def test():
    try :
        a = 5.0 / 0.0
        print('输出:我是try')
        return 0
    except :
        print('输出:我是except')
        return 1
    else :
        print('输出:我是else')
        return 2
    finally :
        print('输出:finally')
print('test: ',test())
# 输出:我是except
# 输出:finally
# test: 1

2.2 除数为1.0

2.2.1 执行逻辑:try–>else–>finally

程序在try内部虽然已经return了,但是else和finally依然会被执行,此时finally有return,则输出为finally代码段的返回值。

def test():
    try :
        a = 5.0 / 1.0
        print('输出:我是try')
        return 0
    except :
        print('输出:我是except')
        return 1
    else :
        print('输出:我是else')
        return 2
    finally :
        print('输出:finally')
        return 3
print('test: ',test())
# 输出:我是try
# 输出:finally
# test: 3

2.2.2 执行逻辑:try–>finally,返回try代码段返回值

程序在try内部已经return了,else不会被执行,finally会被执行,此时finally没有return,则输出为try代码段的返回值。

def test():
    try :
        a = 5.0 / 1.0
        print('输出:我是try')
        return 0
    except :
        print('输出:我是except')
        return 1
    else :
        print('输出:我是else')
        return 2
    finally :
        print('输出:finally')
        # return 3
print('test: ',test())
# 输出:我是try
# 输出:finally
# test: 0

2.2.3 执行逻辑:try–>else–>finally,返回else代码段返回值

程序在try内部无return,else将会被执行,finally也会被执行,此时finally没有return,则输出为else代码段的返回值。

def test():
    try :
        a = 5.0 / 1.0
        print('输出:我是try')
        # return 0
    except :
        print('输出:我是except')
        return 1
    else :
        print('输出:我是else')
        return 2
    finally :
        print('输出:finally')
        # return 3
print('test: ',test())
# 输出:我是try
# 输出:我是else
# 输出:finally
# test: 2

总结:

  • 无论有无异常,finally代码段一定会被执行
  • 若有异常,则执行except代码段
  • 若无异常且无return,则执行else代码段
  • 若无异常且有return, try代码段中有return 语句, 则else代码段不会被执行
  • 若无异常且有return, try代码段没有return语句,则else代码段会执行

以上就是本期为大家整理的全部内容了,赶快练习起来吧,喜欢的朋友可以点赞、收藏也可以分享到朋友圈让更多人知道

推荐阅读

技巧 | Python 字典用法详解(超全)
技巧 | Python 列表经典使用技巧
技巧 | 20个Pycharm最实用最高效的快捷键(动态展示)
可视化 | 动起来的中国大学排名,看看你的母校在哪里
可视化 | Python时间序列化NBA球星赛季数据
可视化 | Python制作最炫3D可视化地图

微信公众号 “Python当打之年” ,每天都有python编程技巧推送,希望大家可以喜欢
在这里插入图片描述

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python 中的 try-except 语句用于捕获并处理异常。当代码执行过程中发生异常时,程序会停止执行并抛出异常信息。如果不处理这些异常,程序就会终止。因此,我们需要使用 try-except 语句来捕获并处理异常,以保证程序的正常运行。 语法如下: ```python try: # 可能会出现异常的代码块 except Exception1: # 异常类型1的处理方式 except Exception2: # 异常类型2的处理方式 else: # 如果 try 块没有抛出任何异常,则执行 else 块 finally: # 不管是否有异常发生,都会执行 finally 块 ``` try 语句块中包含可能会出现异常的代码,如果代码块中有异常抛出,则会自动跳转到相应的 except 块中进行异常处理except 块用于捕获特定类型的异常,并提供相应的处理方式。如果不指定异常类型,则会捕获所有类型的异常。可以在一个 try 语句中包含多个 except 块,以处理不同类型的异常。 else 块在 try 块没有抛出任何异常时执行,用于定义在没有异常发生时要执行的代码。 finally 块在无论是否有异常发生时都会执行,用于定义一些必须执行的代码,例如释放资源等。 Python 中常见的异常类型包括: - AttributeError:当访问对象的属性或方法不存在时抛出。 - NameError:当访问未定义的变量时抛出。 - TypeError:当操作或函数应用于不支持它的对象类型时抛出。 - ValueError:当传递给函数的参数不正确时抛出。 - ZeroDivisionError:当除数为零时抛出。 例如: ```python try: num1 = int(input("请输入一个整数:")) num2 = int(input("请输入另一个整数:")) result = num1 / num2 print("结果为:", result) except ValueError: print("请输入整数") except ZeroDivisionError: print("除数不能为零") except: print("发生了其他异常") else: print("计算完成") finally: print("程序结束") ``` 在这个例子中,我们尝试将用户输入的两个字符串转换为整数,并计算它们的商。如果输入的不是整数,会抛出 ValueError 异常;如果除数为零,会抛出 ZeroDivisionError 异常。如果发生其他异常,则会捕获所有异常。如果没有异常发生,则打印计算结果。不管有没有异常发生,都会打印“程序结束”。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python当打之年

您的鼓励是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值