Python零基础入门(十一)——异常处理

系列文章目录

个人简介:机电专业在读研究生,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 块中的代码都会被执行。

异常处理语句中各个子句的执行关系如下:

Python零基础入门(十一)——异常处理_第1张图片

使用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 (或 print ): 打印变量的值。
  • h(或 help): 显示调试命令的帮助信息。
  • r(或 return): 继续执行程序直到当前函数返回。
  • q(或 quit): 退出调试环境。

使用这些命令,可以逐步执行代码、查看变量的值,并在需要时修改代码以进行调试。调试完成后,需要将代码中的断点和 pdb.set_trace() 行删除或注释掉。

使用IDE的调试工具

许多Python集成开发环境(IDE)都提供了强大的调试工具。通过使用IDE的调试功能,我们可以方便地设置断点、逐步执行代码、查看变量值和监控程序流程。

结语

综上所述,异常处理是保障程序稳健性和可靠性的重要手段。在编写 Python 程序时,应该养成良好的异常处理习惯,并合理利用调试工具,从而快速定位和解决问题

至此,《Python入门》专栏已完结,感谢阅读本专栏博客,希望对你有所帮助!祝你编程愉快!

你可能感兴趣的:(#,Python入门,Python,python,开发语言,pycharm,人工智能)