概念

在程序运行过程中,总会遇到各种各样的错误。

有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误通常称之为bug,bug是必须修复的。

有的错误是用户输入造成的,比如让用户输入email地址,结果得到一个空字符串,这种错误可以通过检查用户输入来做相应的处理。

还有一类错误是完全无法在程序运行过程中预测的,比如写入文件的时候,磁盘满了,写不进去了,或者从网络抓取数据,网络突然断掉了。这类错误也称为异常,在程序中通常是必须处理的,否则,程序会因为各种问题终止并退出。

Python内置了一套异常处理机制,来帮助我们进行错误处理。

作为Python初学者,在刚学习Python编程时,经常会看到一些报错信息,例如:
在这里插入图片描述

Python中的错误可以分为两种:语法错误异常

  • 语法错误(Syntax errors) :代码编译时的错误,不符合Python语言规则的代码会停止编译并返回 错误信息
  • 异常(Exceptions) :相较于语法错误,异常比较难发现,因为它只在代码运行时才会发生, 如类型错误、数值错误、索引错误和属性错误等

Python异常类层级图:
在这里插入图片描述

主要错误

Python中的主要错误
在这里插入图片描述

语法错误(SyntaxError)

  • 缺少起始符号或结尾符号(括号、引号等)
    在这里插入图片描述
  • 缩进错误
    在这里插入图片描述
  • 关键词拼写错误
    在这里插入图片描述

六种典型的异常

  • 除零错误(ZeroDivisionError):除数为0
    在这里插入图片描述
  • 名称错误(NameError):变量使用前未进行申明或者初始化
    在这里插入图片描述
  • 类型错误(TypeError):某些函数或者方法只适用于特定的数据类型,如果 对数据类型的操作不当,就会产生类型错误
    在这里插入图片描述
  • 数值错误(ValueError):在输入类型正确的情况下,具体输入值错误
    在这里插入图片描述
  • 索引错误(IndexError):超出序列长度的索引操作
    在这里插入图片描述
  • 属性错误(AttributeError):方法或者属性不适用该对象
    在这里插入图片描述

捕获异常

高级语言通常都内置了一套错误处理机制,Python也不例外
在Python中可通过try…except…else…finally…机制捕获异常并进行处理
在这里插入图片描述
try…except…else…工作原理
在这里插入图片描述
finally子句:无论程序运行对或错,都会执行的部分
在这里插入图片描述
示例:
假设我们有一个需要除法的函数,但我们想确保分母不为零,以避免除以零的错误:

def safe_divide(a, b):  
    try:  
        result = a / b  
    except ZeroDivisionError:  
        print("错误:除数不能为0")  
    else:  
        print(f"结果是 {result}")  
    finally:  
        print("执行了除法操作。")
 # 测试函数  
safe_divide(10, 2)  
safe_divide(10, 0)
'''
结果是 5.0
执行了除法操作。
错误:除数不能为0
执行了除法操作。
'''

抛出异常

Python 使用 raise 语句抛出一个指定的异常
在这里插入图片描述
例如执行以下代码会触发异常:
在这里插入图片描述
在这里插入图片描述
raise 需要指定要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。

用户自定义异常

在Python中可以通过创建一个新的异常类来拥有自己的异常

自定义异常的原因:

  • Python提供的内建异常不够用
  • 可以预估某个错误的产生

定义异常类

  • 异常类继承自 Exception 类,可以直接继承,或者间接继承
    在这里插入图片描述

示例:
Python 允许你定义自己的异常类,这通常是通过继承内置的 Exception 类(或它的子类)来完成的:

class MyCustomError(Exception):  
    def __init__(self, message="这是一个自定义的异常!"):  
        self.message = message  
        super().__init__(self.message)  
  
try:  
    raise MyCustomError("看,我抛出了一个自定义异常!")  
except MyCustomError as e:  
    print(e)
'''看,我抛出了一个自定义异常!'''
Logo

GitCode AI社区是一款由 GitCode 团队打造的智能助手,AI大模型社区、提供国内外头部大模型及数据集服务。

更多推荐