异常处理与 Python
在编程过程中,我们经常会遇到各种各样的错误和异常。当程序出现异常时,如果不加以处理,就会导致程序终止运行。因此,对异常进行适当的处理是编写稳定和健壮程序的关键之一。Python 提供了丰富的异常处理机制,使得我们可以灵活地处理各种异常情况。
什么是异常
在编程中,异常是指程序在运行过程中出现的错误或意外情况。比如除以零、访问不存在的键、文件不存在等都属于常见的异常情况。一旦程序出现异常,如果没有适当的处理机制,就会导致程序崩溃并终止运行。
Python 异常处理机制
在 Python 中,异常是使用 try
、except
和 finally
关键字来处理的。try
语句用于包裹可能会抛出异常的代码块,except
语句用于捕获异常并处理异常情况,finally
语句用于无论是否发生异常都会执行的代码块。下面是一个简单的示例:
try:
num = 10 / 0
except ZeroDivisionError:
print("除数不能为零!")
在这个示例中,我们尝试将 10
除以 0
,这会引发 ZeroDivisionError
异常。except ZeroDivisionError
语句捕获到这个异常,并打印出提示信息。
常见的异常类型
Python 提供了许多内置的异常类型,常见的包括:
- ZeroDivisionError:除数为零错误
- NameError:未声明/初始化对象错误
- TypeError:类型不匹配错误
- ValueError:传入无效参数错误
- IndexError:访问不存在的索引错误
- FileNotFoundError:文件不存在错误
- …
下面是一个示例,演示了如何处理 IndexError
异常:
try:
numbers = [1, 2, 3]
print(numbers[4])
except IndexError:
print("索引超出范围!")
捕获多个异常类型
有时候,我们可能需要捕获多个不同类型的异常,并针对不同的异常类型进行不同的处理。这时可以使用多个 except
语句来捕获不同类型的异常。下面是一个示例:
try:
num = 10 / 0
except ZeroDivisionError:
print("除数不能为零!")
except NameError:
print("未声明或初始化对象!")
捕获所有异常
有时候,我们希望捕获所有可能发生的异常,而不管具体是什么类型的异常。这时可以使用 Exception
类来捕获所有异常。下面是一个示例:
try:
num = 10 / 0
except Exception as e:
print("发生异常:", e)
抛出异常
除了捕获异常外,我们也可以手动抛出异常。使用 raise
关键字可以主动触发异常,从而中断程序的执行。下面是一个示例:
def divide(a, b):
if b == 0:
raise ZeroDivisionError("除数不能为零!")
return a / b
try:
result = divide(10, 0)
except ZeroDivisionError as e:
print("发生异常:", e)
finally 语句
finally
语句用于无论是否发生异常都会执行的代码块。在异常处理前后,我们可以使用 finally
来做一些资源的清理工作。下面是一个示例:
try:
file = open("example.txt", "r")
data = file.read()
print(data)
except FileNotFoundError:
print("文件不存在!")
finally:
file.close()
自定义异常
除了使用内置的异常类型,我们也可以自定义异常类来表示特定的错误或情况。自定义异常类可以继承自 Exception
类,然后在类中定义自己的异常信息。