Python异常处理
语法错误、六种典型的错误、捕获异常、用户自定义异常
概念
在程序运行过程中,总会遇到各种各样的错误。
有的错误是程序编写有问题造成的,比如本来应该输出整数结果输出了字符串,这种错误通常称之为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)
'''看,我抛出了一个自定义异常!'''
更多推荐



所有评论(0)