Python 异常
最后修改于 2025 年 2 月 24 日
Python 中的异常是在程序执行过程中发生的、中断正常指令流程的事件。Python 使用 try-except 块提供了一个强大的异常处理机制。本教程涵盖了异常的基础知识、如何处理它们以及编写清晰、可维护代码的最佳实践。
异常是在程序执行期间发生的错误。当发生异常时,Python 会创建一个异常对象并停止程序,除非该异常被处理。常见的异常包括 ZeroDivisionError、TypeError 和 FileNotFoundError。
处理除零错误
此示例演示了如何使用 try-except 块处理除零错误。
try:
result = 10 / 0
except ZeroDivisionError:
print("Error: Division by zero is not allowed.")
try 块包含可能引发异常的代码。如果发生 ZeroDivisionError,则执行 except 块,并打印错误消息。
处理多个异常
此示例演示了如何使用单个 try-except 块处理多个异常。
try:
num = int(input("Enter a number: "))
result = 10 / num
except ValueError:
print("Error: Invalid input. Please enter a valid number.")
except ZeroDivisionError:
print("Error: Division by zero is not allowed.")
try 块尝试将用户输入转换为整数并执行除法。如果发生 ValueError 或 ZeroDivisionError,则会执行相应的 except 块。
使用 else 子句
此示例演示了如何在 try-except 块中使用 else 子句。
try:
num = int(input("Enter a number: "))
result = 10 / num
except ValueError:
print("Error: Invalid input. Please enter a valid number.")
except ZeroDivisionError:
print("Error: Division by zero is not allowed.")
else:
print(f"Result: {result}")
如果 try 块中没有发生异常,则执行 else 块。当 try 块成功运行时,它对于应该只运行的代码很有用。
使用 finally 子句
此示例演示了如何在 try-except 块中使用 finally 子句。
try:
file = open("example.txt", "r")
content = file.read()
except FileNotFoundError:
print("Error: File not found.")
finally:
file.close()
print("File closed.")
无论是否发生异常,都会执行 finally 块。它通常用于清理操作,例如关闭文件或释放资源。
引发自定义异常
此示例演示了如何使用 raise 关键字引发自定义异常。
def check_age(age):
if age < 0:
raise ValueError("Age cannot be negative.")
elif age < 18:
raise ValueError("You must be at least 18 years old.")
else:
print("Access granted.")
try:
check_age(-5)
except ValueError as e:
print(f"Error: {e}")
如果年龄为负数或低于 18 岁,check_age 函数将引发 ValueError。异常会在 try-except 块中被捕获和处理。
创建自定义异常类
此示例演示了如何通过继承 Exception 类来创建自定义异常类。
class InvalidAgeError(Exception):
def __init__(self, message="Invalid age."):
self.message = message
super().__init__(self.message)
def check_age(age):
if age < 0:
raise InvalidAgeError("Age cannot be negative.")
elif age < 18:
raise InvalidAgeError("You must be at least 18 years old.")
else:
print("Access granted.")
try:
check_age(-5)
except InvalidAgeError as e:
print(f"Error: {e}")
InvalidAgeError 类是继承自 Exception 的自定义异常。它在 check_age 函数中引发,并在 try-except 块中被捕获。
异常处理最佳实践
- 具体化: 捕获特定的异常,而不是使用通用的
except块。 - 使用 Finally 进行清理: 使用
finally块进行清理操作,例如关闭文件或释放资源。 - 避免静默失败: 始终记录或处理异常,以避免静默失败。
- 创建自定义异常: 使用自定义异常来提供更有意义的错误消息。
来源
在本文中,我们探讨了 Python 异常,并通过实际示例演示了如何有效地处理它们。
作者
列出所有 Python 教程。