系列文章目录
个人简介:机电专业在读研究生,CSDN内容合伙人,博主个人首页
Python入门专栏:《Python入门》欢迎阅读,一起进步!🌟🌟🌟
码字不易,如果觉得文章不错或能帮助到你学习,可以点赞👍收藏📁评论📒+关注哦!😊😊😊
文章目录
- 系列文章目录
- 导语
- 异常概述
- 异常处理语句
- try-except语句
- try-except-else语句
- try-except-finally语句
- 使用raise语句抛出异常
- 程序调试
- 使用print语句
- 使用断点调试
- 使用IDE的调试工具
- 结语
导语
欢迎来到本系列的第十一篇文章!在前面的学习中,已经介绍了 Python 的基本语法、条件和循环语句、函数、面向对象编程以及模块与包的使用。今天,我们将继续拓展我们的 Python 技能,学习异常处理。在编程过程中,难免会出现错误和异常情况。异常处理是一种能够优雅地处理这些错误情况的方式,使程序更加健壮和可靠,让我们一起开始吧!
异常概述
在 Python 中,异常(Exception)是指程序执行过程中发生的错误或意外情况。当遇到异常时,程序会立即终止并抛出异常信息。常见的异常有如下(了解,不需记住):
错误类型 | 描述 |
---|---|
SyntaxError | 语法错误,通常是由于代码书写不符合 Python 语法规则导致的 |
IndentationError | 缩进错误,通常是由于代码缩进不正确导致的 |
NameError | 名称错误,通常是由于访问一个未定义的变量或函数导致的 |
TypeError | 类型错误,通常是由于操作对象的类型不正确导致的 |
ZeroDivisionError | 零除错误,通常是由于除数为零导致的 |
IndexError | 索引错误,通常是由于访问列表或序列中不存在的索引导致的 |
KeyError | 键错误,通常是由于在字典中访问不存在的键导致的 |
FileNotFoundError | 文件未找到错误,通常是由于打开或读取不存在的文件导致的 |
ImportError | 导入错误,通常是由于导入不存在的模块或包导致的 |
ValueError | 值错误,通常是由于函数或方法接收到无效的参数值导致的 |
IOError | IO 错误,通常是由于输入输出操作失败导致的 |
AttributeError | 属性错误,通常是由于访问对象不存在的属性或方法导致的 |
以上列出的是一小部分常见的 Python 错误类型。在实际编程中,可能会遇到更多不同类型的错误。理解这些错误的原因和含义,将有助于快速定位和解决问题。
异常处理语句
如果不处理上面的异常,程序将会崩溃。为了避免程序异常终止,需要使用异常处理来捕获并处理这些异常情况。Python 提供了一组用于异常处理的语句,可以使用它们来捕获和处理异常,从而使程序继续执行或采取相应的措施。
try-except语句
最常用的异常处理语句是 try-except
语句。它允许我们尝试执行一段可能出现异常的代码,并在出现异常时执行相应的处理代码。语法如下:
try:
block1
except [ExceptionName [as alias]]:
block2
其中,ExceptionName [as alias]
:可选参数,用于指定要捕获的异常。ExceptionName
表示要捕获的异常名称,如果在其右侧加上 “as alias", 则表示为当前的异常指定一个别名, 通过该别名,可以记录异常的具体内容。
在使用 try-except
时,把可能产生异常的代码放在 try
语句块中,把处理结果放在 except
语句块中,这样,当 try
语句块中的代码出现错误,就会执行 except
语句块中的代码,如果 try
语句块中的代码没有错误,那么 except
语句块将不会执行。示例如下
try:
# 可能出现异常的代码块
result = 10 / 0 # 尝试除以零,会抛出ZeroDivisionError异常
except ZeroDivisionError:
# 处理异常的代码块
print("除数不能为零!")
try-except-else语句
除了 try-except
,还可以使用try-except-else
语句。在 try
块中的代码不发生异常时,将会执行 else
块中的代码。如下所示:
try:
# 可能出现异常的代码块
result = 10 / 2
except ZeroDivisionError:
# 处理异常的代码块
print("除数不能为零!")
else:
# 未发生异常时执行的代码块
print("结果为:", result)
上述例子中,除法运算没有引发异常,所以程序执行了 else
块中的代码,打印出了计算结果。
try-except-finally语句
完整的异常处理语句应该包含 finally
代码块,通常情况下,无论程序中有无异常产生,finally
代码块中的代码都会被执行。示例如下:
try:
# 可能出现异常的代码块
result = 10 / 0 # 尝试除以零,会抛出ZeroDivisionError异常
except ZeroDivisionError:
# 处理异常的代码块
print("除数不能为零!")
finally:
# 不管是否发生异常,都会执行的代码块
print("程序执行结束。")
在上述例子中,无论除法运算是否引发异常,finally
块中的代码都会被执行。
异常处理语句中各个子句的执行关系如下:
使用raise语句抛出异常
如果某个函数或方法可能会产生异常,但不想在当前函数或方法中处理这个异常,则可以使用 raise
语句在函数或方法中抛出异常。raise
语句的基本语法如下:
raise [ExceptionName[(reason)]]
其中,ExceptionName[(reason)]
为可选参数,用于指定抛出的异常名称,以及异常信息的相关描述。如果省略,就会把当前的错误原样抛出。例如:
def divide(a, b):
if b == 0:
raise ValueError("除数不能为零!")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(e) # 输出:除数不能为零!
上述例子中,自定义了一个 ValueError
异常,并在 divide
函数中根据特定条件手动抛出了这个异常。在 try-except
语句中,我们捕获了这个异常,并输出了错误信息。
程序调试
在程序开发过程中,对于语法方面的错误比较好检测,因为程序会直接停止,并且给出错误提示。而对于逻辑错误就不太容易发现了。因为程序可能会一直执行下去,但结果是错误的。所以作为一名程序员, 掌握一定 的程序调试方法,可以说是一项必备技能。
使用print语句
在程序中插入 print
语句是最简单的调试方法之一。通过在关键位置打印变量值或输出提示信息,可以帮助了解程序执行时的状态和流程。
使用断点调试
Python 提供了许多调试工具,如标准模块 pdb
(Python Debugger)。通过在代码中插入断点,可以暂停程序执行,并逐步查看每个步骤的变量值和执行情况。如下:
import pdb
def divide(a, b):
pdb.set_trace() # 设置断点
if b == 0:
raise ValueError("除数不能为零!")
return a / b
try:
result = divide(10, 0)
except ValueError as e:
print(e)
上述例子中使用了 pdb.set_trace()
在 divide
函数中设置了断点。当程序执行到这个断点时,会暂停执行并进入 pdb
的调试环境。在调试环境中,可以使用一些基本的命令来控制程序的执行和查看变量的值:
l
(或list
): 显示当前代码的位置和上下文,默认显示当前行周围的代码。n
(或next
): 执行下一行代码。s
(或step
): 进入函数调用。c
(或continue
): 继续执行程序直到下一个断点或程序结束。p <variable>
(或print <variable>
): 打印变量的值。h
(或help
): 显示调试命令的帮助信息。r
(或return
): 继续执行程序直到当前函数返回。q
(或quit
): 退出调试环境。
使用这些命令,可以逐步执行代码、查看变量的值,并在需要时修改代码以进行调试。调试完成后,需要将代码中的断点和 pdb.set_trace()
行删除或注释掉。
使用IDE的调试工具
许多Python集成开发环境(IDE)都提供了强大的调试工具。通过使用IDE的调试功能,我们可以方便地设置断点、逐步执行代码、查看变量值和监控程序流程。
结语
综上所述,异常处理是保障程序稳健性和可靠性的重要手段。在编写 Python 程序时,应该养成良好的异常处理习惯,并合理利用调试工具,从而快速定位和解决问题
至此,《Python入门》专栏已完结,感谢阅读本专栏博客,希望对你有所帮助!祝你编程愉快!