Python 基础:异常

目录

  • 一、异常概念
  • 二、处理异常
    • [2.1 抛出异常](#2.1 抛出异常)
    • [2.2 使用 try-except 代码块](#2.2 使用 try-except 代码块)
    • [2.3 使用 try-except-else 代码块](#2.3 使用 try-except-else 代码块)
    • [2.4 静默失败](#2.4 静默失败)
  • 三、总结

遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步!

本文参考:《Python编程:从入门到实践(第2版)》

一、异常概念

每当发生错误时,Python 都会创建一个异常对象

如果我们编写了处理该异常的代码,程序将继续运行;

如果未对异常进行处理,程序将停止并显示 traceback,其中包含有关异常的报告。

异常 是使用 try-except 代码块处理的。try-except 代码块让 Python 执行指定的操作,同时告诉 Python 发生异常时怎么办。使用 try-except 代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的 traceback。

二、处理异常

2.1 抛出异常

我们知道不能用数除以 0 0 0,但我们仍然这样做会发生什么呢?

python 复制代码
print(5/0)

运行后这里我们看到一个 traceback:

这里指出的错误 ZeroDivisionError 是个异常对象

在这种情况下,Python 将停止运行程序,并指出引发了哪种异常,而我们可根据这些信息对程序进行修改。这样,如果再次发生此类错误,我们就有备无患了。

2.2 使用 try-except 代码块

我们可以将错误的代码行放在 try 代码片中。

如果这个代码块运行起来没有问题 ,Python 将跳过 except 代码块;

如果出现问题,Python 将查找与之匹配except 代码块并运行其中的代码。

python 复制代码
try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

运行结果为:

这个结果是我们所容易接受的😊

2.3 使用 try-except-else 代码块

如果 try 代码块抛出异常,即出现问题是,会到 except 代码块中寻找对应的处理,而跳过 else 代码块;

python 复制代码
try:
    answer = 5/0  # 会出现问题
except ZeroDivisionError:
    print("You can't divide by zero!")
else:
    print(answer)

执行结果为:

如果 try 代码块执行正确,没有出现问题,则会执行 else 代码块,而跳过 except 代码块。

python 复制代码
try:
    answer = 5/2  # 这里我们修改正确
except ZeroDivisionError:
    print("You can't divide by zero!")
else:
    print(answer)

执行结果为:

2.4 静默失败

Python 有一个 pass 语句,可用于让 Pytho n在代码块中什么都不要做:

python 复制代码
try:
    answer = 5/0
except ZeroDivisionError:
    pass  # 什么都不做
else:
    print(answer)

执行后我们发现什么都没有输出。

三、总结

  • 异常是程序运行时可能遇到的非预期情况,如除以零或文件未找到等。
  • 使用 try-except 代码块可以捕获并处理这些异常,防止程序因错误而中断
  • try-except-else 代码块则进一步允许在无异常发生时执行特定代码
  • 静默失败是指程序在遇到错误时不显示任何错误信息,继续执行。
  • 合理使用异常处理机制,可以提高程序的健壮性和用户体验。
相关推荐
fantasy_arch1 小时前
pytorch例子计算两张图相似度
人工智能·pytorch·python
七七&5561 小时前
2024年08月13日 Go生态洞察:Go 1.23 发布与全面深度解读
开发语言·网络·golang
java坤坤1 小时前
GoLand 项目从 0 到 1:第八天 ——GORM 命名策略陷阱与 Go 项目启动慢问题攻坚
开发语言·后端·golang
元清加油1 小时前
【Golang】:函数和包
服务器·开发语言·网络·后端·网络协议·golang
健康平安的活着2 小时前
java之 junit4单元测试Mockito的使用
java·开发语言·单元测试
WBluuue3 小时前
数学建模:智能优化算法
python·机器学习·数学建模·爬山算法·启发式算法·聚类·模拟退火算法
赴3353 小时前
矿物分类案列 (一)六种方法对数据的填充
人工智能·python·机器学习·分类·数据挖掘·sklearn·矿物分类
大模型真好玩3 小时前
一文深度解析OpenAI近期发布系列大模型:意欲一统大模型江湖?
人工智能·python·mcp
RPA+AI十二工作室3 小时前
亚马逊店铺绩效巡检_影刀RPA源码解读
chrome·python·rpa·影刀
DjangoJason3 小时前
C++ 仿RabbitMQ实现消息队列项目
开发语言·c++·rabbitmq