Python中的异常处理与try-except

今天我们将探讨编写健壮且抗错误的Python程序的一个关键技能——使用tryexcept等进行异常处理

我们都会犯错——代码也是如此。Python提供了工具,让我们能够优雅地捕获和处理错误,而不是让程序崩溃。


📦 你将学到什么

  • 什么是异常以及它们是如何发生的
  • 如何使用tryexcept
  • 可选工具:elsefinally
  • 如何处理多个异常
  • 实际案例

⚠️ 什么是异常?

异常是运行时错误,它会中断程序的正常流程。常见的例子包括:

  • 除以零
  • 访问无效索引
  • 不正确地将字符串转换为数字
  • 文件未找到

未处理的情况:

num = int(input("请输入一个数字: "))
print(10 / num)

如果用户输入0或一个字符串,程序将崩溃。让我们来修复这个问题。


✅ 基本的 try-except

try:
    num = int(input("请输入一个数字: "))
    result = 10 / num
    print(result)
except ZeroDivisionError:
    print("你不能除以零!")
except ValueError:
    print("请输入一个有效的数字。")

🔍 输出示例:

  • 输入: 0 → “你不能除以零!”
  • 输入: "abc" → “请输入一个有效的数字。”

🧪 捕获所有异常(不推荐经常使用)

try:
    risky_code()
except Exception as e:
    print("发生了错误:", e)

对于日志记录或调试非常有用,但尽量在可能的情况下处理特定的异常。


🧠 使用 elsefinally

  • else 在没有发生异常时运行
  • finally 无论如何都会运行 (非常适合清理工作)

try:
    num = int(input(请输入数字: ))
    result = 10 / num
except ZeroDivisionError:
    print(无法除以零。)
else:
    print(除法成功:, result)
finally:
    print(这段代码总会执行。)


🔁 处理多个错误

try:
     numbers = [1, 2, 3]
    print(numbers[5])  # IndexError
except (IndexError, ValueError) as e:
    print("发生错误:", e)

🚀 现实世界示例:安全的用户输入


def get_age():
    try:
        age = int(input("请输入您的年龄: "))
        print("您是", age, "岁。")
    except ValueError:
        print("无效的年龄。请输入一个数字。")

get_age()

🧰 自定义异常(高级)

您可以为特定的业务逻辑定义自己的异常:

class AgeTooLowError(Exception):
     pass

def check_age(age):
      if age < 18:
         raise AgeTooLowError("您必须至少18岁。")

🧼 最佳实践

  • ✅ 捕获特定异常(ValueErrorZeroDivisionError
  • ✅ 使用 finally 进行清理(例如,关闭文件)
  • ✅ 除非绝对必要,避免使用裸 except:
  • ✅ 记录或显示有意义的错误信息
  • 🚫 不要将异常用于正常控制流

🧠 回顾

今天你学到了:

  • 什么是异常
  • 如何使用 tryexceptelsefinally
  • 如何处理多个和自定义异常
  • 使你的程序具备抗崩溃能力的实际示例

更多