首页 论坛 置顶 Python中的异常处理与try-except

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 作者
    帖子
  • #25000

    今天我们将探讨编写健壮且抗错误的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
    • 如何处理多个和自定义异常
    • 使你的程序具备抗崩溃能力的实际示例

正在查看 1 个帖子:1-1 (共 1 个帖子)
  • 哎呀,回复话题必需登录。