Python 异常捕获(详解)

前言:上一篇感觉太多了,应该看完文件和os模块就不太想看最后的异常捕获了,所以这一章单独拿出来写异常捕获,而且里面大部分代码我都有进行详细的解释,各位肯定可以读懂滴拉~~

Python异常

异常的基本概念:

在 Python 中,异常是一种在程序执行过程中出现的错误情况。当程序遇到错误,如除零错误、索引超出范围、文件不存在等情况时,就会引发异常。异常会中断当前的执行流程,除非被捕获并处理,否则程序会终止运行。

异常显示:

异常捕获:

基本语法:

try...except:主要用于捕获代码运行时异常,如果异常发生,则执行except中的代码

python 复制代码
try:
 可能发⽣错误的代码
except:
 如果出现异常执⾏的代码

异常处理的流程:

1.程序首先执行 try 代码块。

2.如果在 try 代码块中没有发生异常,except 代码块不会被执行。

3.如果发生异常,程序会跳转到匹配的 except 代码块,执行相应的异常处理代码。

4.如果没有匹配的 except 代码块,异常会向上传播到调用栈的上一级,直到被捕获或程序终止。

多异常处理:

可以使用多个 except 子句来处理不同类型的异常:

python 复制代码
try:
    num = int("abc")  # 这会引发 ValueError
    result = 10 / num  # 这会引发 ZeroDivisionError
    print(result)
except ValueError:
    print("输入不是有效的数字")
except ZeroDivisionError:
    print("除数不能为零")

捕获多个异常:

可以将多个异常类型放在一个 except 子句中,使用元组:

python 复制代码
try:
    num = int("abc")
    result = 10 / num
    print(result)
except (ValueError, ZeroDivisionError):
    print("输入错误或除数不能为零")

总结:

try-except****语句是 Python 中处理异常的重要工具,它可以帮助你使程序更健壮,避免因未处理的异常而导致程序崩溃。根据可能出现的异常类型和情况,合理地使用 try-except 语句,可以使程序更加可靠,提高用户体验和代码的可维护性。

捕获异常并输出错误信息:

python 复制代码
try:
 可能遇到的错误代码
except Exception as e:
 print(e)

代码实例:

python 复制代码
try:
    # 可能引发异常的代码
    result = 10 / 0  # 这会引发 ZeroDivisionError
except ZeroDivisionError as e:
    # 捕获 ZeroDivisionError 异常并输出错误信息
    print(f"捕获到 ZeroDivisionError 异常:{e}")
except Exception as e:
    # 捕获其他未被特定处理的异常
    print(f"捕获到其他异常:{e}")

代码解释:

  1. try 块

    • 包含可能会引发异常的代码。在上述示例中,10 / 0 会导致 ZeroDivisionError 异常,因为除数不能为零。
  2. except ZeroDivisionError as e

    • 这部分用于专门捕获 ZeroDivisionError 异常。
    • as e 允许将异常对象存储在变量 e 中,以便在异常处理代码中使用。
    • 打印出 ZeroDivisionError 异常的具体信息,包括异常类型和异常消息。
  3. except Exception as e

    • 这是一个通用的异常捕获语句,用于捕获其他未被特定处理的异常。
    • Exception 是所有内置异常的基类,因此它可以捕获除 ZeroDivisionError 以外的其他异常。
    • 同样,as e 存储异常对象,以便打印异常信息。

异常捕获中else语句:

else语句:表示的是如果没有异常要执行的代码。

基本结构:

python 复制代码
try:
    # 可能引发异常的代码块
except SomeException:
    # 当发生 SomeException 异常时执行的代码块
else:
    # 当 try 代码块中没有发生异常时执行的代码块

代码实例:

python 复制代码
try:
    result = 10 / 2  # 正常的除法运算
except ZeroDivisionError:
    print("除数不能为零")
else:
    print(f"结果是: {result}")

代码解释

  • try 代码块
    • 包含可能引发异常的代码。在这个例子中,10 / 2 是一个正常的除法运算,不会引发异常。
  • except ZeroDivisionError
    • 用于捕获 ZeroDivisionError 异常。由于 try 代码块中没有发生该异常,所以不会执行此代码块。
  • else 代码块
    • try 代码块中没有发生异常时,执行此代码块。在这里,会打印出除法运算的结果。

异常捕获中finally语句:

基本概念: 在 Python 的异常处理机制中,finally 子句是一个非常重要的部分,它的主要作用是确保无论 try 块中的代码是否引发异常,其中的代码都会被执行。

基本结构:

python 复制代码
try:
    # 可能引发异常的代码块
except SomeException:
    # 当发生 SomeException 异常时执行的代码块
else:
    # 当 try 代码块中没有发生异常时执行的代码块
finally:
    # 无论是否发生异常都会执行的代码块

代码实例:

python 复制代码
def divide(x, y):
    try:
        result = x / y
        print(f"结果是: {result}")
    except ZeroDivisionError:
        print("除数不能为零")
    finally:
        print("这是 finally 子句,总是会执行")


# 调用函数
divide(10, 2)
divide(10, 0)

代码解释

  • try 代码块
    • 包含可能引发异常的代码。在 divide(10, 2) 中,执行正常的除法运算,在 divide(10, 0) 中,会引发 ZeroDivisionError
  • except ZeroDivisionError
    • 当发生 ZeroDivisionError 异常时,会打印相应的错误信息。
  • finally 代码块
    • 无论是否发生异常,都会打印 "这是 finally 子句,总是会执行"

总结finally的作用:

finally 通常用于释放资源,如关闭文件、关闭数据库连接、释放锁等,确保资源在使用后被正确释放,避免资源泄漏。

即使 try 块中引发了异常或 except 块中引发了新的异常,finally 块中的资源清理代码仍然会执行。

异常传播

如果 finally 块中引发了异常,它会覆盖 tryexcept 块中引发的异常。 在 finally 块中引发异常时要谨慎,避免掩盖了原有的异常。

使用 finally 子句可以确保重要的操作(如资源清理)在任何情况下都能完成,提高代码的健壮性和可靠性,特别是在涉及资源管理时非常有用。

finally语句与else语句的区别:

else 子句

只有在 try 块中没有发生异常时才会执行。

主要用于在没有异常发生时执行正常的操作,使正常操作和异常处理分离。

finally 子句

无论是否发生异常都会执行。

侧重于资源清理和保证某些操作的最终执行。

结:对于异常捕获的详细解释就到这里拉,如果有问题的话,再后面还会有补充的

相关推荐
这周也會开心5 分钟前
云服务器安装JDK、Tomcat、MySQL
java·服务器·tomcat
hrrrrb1 小时前
【Spring Security】Spring Security 概念
java·数据库·spring
小信丶1 小时前
Spring 中解决 “Could not autowire. There is more than one bean of type“ 错误
java·spring
sdgsdgdsgc1 小时前
Next.js企业级应用开发:SSR、ISR与性能监控方案
开发语言·前端·javascript
哲此一生9841 小时前
搭建Vue3工程(去除不必要的文件)
前端·javascript·vue.js
周杰伦_Jay2 小时前
【Java虚拟机(JVM)全面解析】从原理到面试实战、JVM故障处理、类加载、内存区域、垃圾回收
java·jvm
晓风残月淡2 小时前
JVM字节码与类的加载(二):类加载器
jvm·python·php
黑云压城After4 小时前
H5使用环信实现视频或语音通话
前端·javascript·vue.js
西柚小萌新4 小时前
【深入浅出PyTorch】--上采样+下采样
人工智能·pytorch·python
未来之窗软件服务5 小时前
自己写算法(九)网页数字动画函数——东方仙盟化神期
前端·javascript·算法·仙盟创梦ide·东方仙盟·东方仙盟算法