一文彻底搞懂Python异常处理:try-except-else-finally

简介: 一文彻底搞懂Python异常处理:try-except-else-finally

本期导读

异常是我们学习和生活中的常客,在编程时遇到的异常我们俗称为“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.02.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代码段会执行

END



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

相关文章
|
2月前
|
安全 Linux 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(一)
71 2
|
2月前
|
Python Windows 网络安全
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
Kali 渗透测试:基于结构化异常处理的渗透-使用Python编写渗透模块(二)
76 2
|
1月前
|
UED 开发者 Python
Python中的异常处理机制
Python中的异常处理机制
39 2
|
3月前
|
Python
Python编程中的异常处理:理解与实践
【9月更文挑战第14天】在编码的世界里,错误是不可避免的。它们就像路上的绊脚石,让我们的程序跌跌撞撞。但是,如果我们能够预见并优雅地处理这些错误,我们的程序就能像芭蕾舞者一样,即使在跌倒的边缘,也能轻盈地起舞。本文将带你深入了解Python中的异常处理机制,让你的代码在面对意外时,依然能保持优雅和从容。
162 73
|
2月前
|
安全 Java 程序员
Python 异常处理!
本文详细介绍了Python中的异常处理,包括try、except和finally语句的使用方法。文章区分了语法错误与异常,并列举了Python中常见的异常类型,如`SyntaxError`、`TypeError`等。通过具体示例展示了如何使用try-except块捕获和处理异常,以及如何结合else和finally子句增强代码的健壮性和可读性。此外,还介绍了如何使用raise语句主动抛出异常。通过合理的异常处理,可以提高程序的可靠性与调试效率,但也可能带来性能开销和代码复杂度的增加。
46 4
|
2月前
|
IDE 开发工具 开发者
Python中的异常处理与调试技巧
【9月更文挑战第32天】在软件开发中,错误和异常是难以避免的。了解如何有效处理这些情况对于编写健壮、可靠的代码至关重要。本文将深入探讨Python中的异常处理机制,介绍如何使用try-except语句捕捉异常,以及如何利用Python的调试工具来诊断问题。通过实际示例,我们将展示如何优雅地处理异常并提高代码质量。
|
3月前
|
对象存储 索引 Python
30天拿下Python之异常处理
30天拿下Python之异常处理
38 3
|
2月前
|
安全 数据库连接 开发者
深度解析Python上下文管理器:优雅资源管理与异常处理
深度解析Python上下文管理器:优雅资源管理与异常处理
30 0
|
4月前
|
PHP 开发者 UED
PHP中的异常处理:从基础到高级探索Python中的列表推导式:简洁而强大的工具
【8月更文挑战第30天】在PHP编程的世界中,异常处理是确保代码健壮性和可靠性的关键机制。本文将引导您了解PHP异常处理的基本概念,并通过实际示例展示如何有效地捕获和处理异常。我们将一起探索try-catch结构、自定义异常类以及高级异常处理技术,让您的PHP代码更加稳固和易于维护。
|
4月前
|
开发者 Python