Skip to content

在 Python 中,try-except 语句是用于异常处理的核心机制,它可以帮助你捕获并处理程序运行过程中出现的异常, 避免程序因异常而崩溃,增强程序的健壮性和稳定性。

1. 基本语法

python
try:
    # 可能会抛出异常的代码块
    pass
except ExceptionType:
    # 当发生指定类型的异常时执行的代码块
    pass
  • try 块:包含可能会引发异常的代码,Python 会尝试执行这个代码块中的所有语句。
  • except 块:用于捕获并处理特定类型的异常。当 try 块中的代码抛出 ExceptionType 类型的异常时,程序会跳转到对应的 except 块中执行相应的处理代码。

示例:

python
try:
    num1 = int(input("请输入一个整数: "))
    num2 = int(input("请再输入一个整数: "))
    result = num1 / num2
    print(f"结果是: {result}")
except ValueError:
    print("输入无效,请输入有效的整数。")
except ZeroDivisionError:
    print("错误: 除数不能为零。")

try 语句块的主要作用是包裹可能会抛出异常的代码。 一旦其中某条语句触发了异常,Python 解释器会中断后续代码的执行,然后根据异常类型寻找匹配的 except 语句块进行处理。

2. 捕获多个异常

可以在一个 except 语句中捕获多个异常,使用元组来指定异常类型:

python
try:
    num = int("abc")
    result = 1 / 0
except (ValueError, ZeroDivisionError):
    print("发生了值错误或除零错误。")

这种形式可以简化代码结构、统一处理相似异常,适用于统一处理的异常逻辑

3. 捕获所有异常

要捕获所有类型的异常,可以使用 except 语句而不指定异常类型,但这种做法不推荐,因为它会掩盖一些潜在的问题,使调试变得困难:

python
try:
    num = 1 / 0
except:
    print("发生了一个异常。")

更推荐的做法是指定具体的异常类型,或者捕获 Exception 基类:

python
try:
    num = 1 / 0
except Exception as e:
    print(f"发生了异常: {e}")

4. else子句

try-except 语句还可以包含一个 else 子句,当 try 块中没有发生任何异常时,会执行 else 块中的代码。

python
try:
    num1 = int(input("请输入一个整数: "))
    num2 = int(input("请再输入一个整数: "))
    result = num1 / num2
except ValueError:
    print("输入无效,请输入有效的整数。")
except ZeroDivisionError:
    print("错误: 除数不能为零。")
else:
    print(f"结果是: {result}")

else 子句提高了代码的可读性和可维护性,开发者可以一目了然地知道哪些代码是在无异常时执行的,便于后续的修改和扩展。

5. finally子句

无论 try 块中是否发生异常,finally 块中的代码都会被执行。因此,通常用于执行一些清理操作,如关闭文件、释放资源等。

python
try:
    file = open('example.txt', 'r')
    content = file.read()
    print(content)
except FileNotFoundError:
    print("文件未找到。")
finally:
    if 'file' in locals():
        file.close()

在这个示例中,无论是否成功打开文件并读取内容,finally 块中的代码都会尝试关闭文件,确保资源被正确释放。