try:
# 可能引发异常的代码
except ExceptionType as e:
# 发生异常时的处理代码
在这个结构中,try 块包含了我们希望尝试执行的代码。如果在 try 块中的代码出现了异常,Python 会跳过该块的剩余代码,并开始执行 except 块中的代码。ExceptionType 是指捕获的异常类型,它可以是任何 Python 内置的异常类型。如果没有指定具体的异常类型,except 块会捕获所有类型的异常。异常对象 e 可选,它用于存储异常的详细信息。例如,以下代码展示了如何使用 try-except 语句来捕获并处理除零错误(ZeroDivisionError):
try:
result = 10 / 0
except ZeroDivisionError as e:
print(f"发生错误:{e}")
在这个例子中,当执行 10 / 0 时,会抛出 ZeroDivisionError 异常,程序将不会崩溃,而是会跳转到 except 块中执行 print 语句,输出错误信息。
Python 内置了多种异常类型,常见的包括:
| 异常类型 | 描述 |
|---|---|
| ZeroDivisionError | 当尝试除以零时抛出。 |
| ValueError | 当传入的参数类型或值不符合预期时抛出。 |
| TypeError | 当操作或函数应用于错误类型的对象时抛出。 |
| FileNotFoundError | 当尝试打开一个不存在的文件时抛出。 |
| IndexError | 当尝试访问一个列表中不存在的索引时抛出。 |
除了这些常见的异常类型,Python 还允许我们定义自定义异常类型。自定义异常可以通过继承内置的 Exception 类来实现。
在有些情况下,代码可能会引发多种不同类型的异常。我们可以使用多个 except 块来分别捕获不同类型的异常。例如:
try:
num1 = int(input("请输入第一个数字:"))
num2 = int(input("请输入第二个数字:"))
result = num1 / num2
except ZeroDivisionError:
print("错误:不能除以零!")
except ValueError:
print("错误:请输入有效的数字!")
except Exception as e:
print(f"发生了其他错误:{e}")
在这个例子中,用户输入两个数字并计算它们的商。如果用户输入非数字值,程序会抛出 ValueError 异常;如果用户输入零作为除数,程序会抛出 ZeroDivisionError 异常。except Exception 块将捕获所有其他未被单独处理的异常,并输出错误信息。
try-except 语句还可以与 else 和 finally 配合使用,以便进行更精确的异常处理。
例如:
try:
num1 = int(input("请输入第一个数字:"))
num2 = int(input("请输入第二个数字:"))
result = num1 / num2
except ZeroDivisionError:
print("错误:不能除以零!")
except ValueError:
print("错误:请输入有效的数字!")
else:
print(f"结果是:{result}")
finally:
print("程序结束。")
在这个例子中,else 块会在没有发生异常时输出计算结果,而 finally 块无论如何都会执行,输出“程序结束”。
通过 try-except 语句,Python 提供了一种优雅的方式来处理程序中的异常,确保程序在遇到错误时不会直接崩溃,而是可以按照预定的逻辑进行处理。通过捕获特定类型的异常,我们可以更加精准地控制错误处理流程,提高程序的健壮性。同时,结合 else 和 finally,我们可以进一步优化代码的执行和资源管理。