鱼C论坛

 找回密码
 立即注册
查看: 23|回复: 1

Python中的raise语句异常处理

[复制链接]
发表于 7 小时前 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Python中的raise语句异常处理,有什么用处。
具体怎么使用,有没有适合小白能理解的实际例子。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 7 小时前 | 显示全部楼层
Python中的raise语句异常处理,有什么用处。具体怎么使用,有没有适合小白能理解的实际例子。


你好!关于 `raise` 语句,我给你一个通俗的解释和几个简单的例子,相信你能看懂。

简单来说,`raise` 语句的用处就是: “主动报告一个错误”

我们通常用 `try...except` 来 “捕获” 和 [b]“处理”[/b 程序中已经发生的错误。
而 `raise` 则是我们 “主动制造” 一个错误,让程序在这里停下来,或者让上一层的 `except` 来捕获它。

这样做主要有两个目的:
1.  提前终止程序:当程序遇到了它无法处理或不应该继续运行的情况时(比如输入了完全错误的数据),主动报错比让它带着错误数据继续运行更安全。
2.  统一错误处理:把各种不同的错误情况,都转换成Python能识别的“异常”类型,这样我们就可以在最外层用统一的 `try...except` 来优雅地处理所有错误了。

基本语法:

  1. raise 异常类型(错误信息)
复制代码


例子1:检查文件扩展名(最基本的raise)
假设我们写了一个函数,只允许处理 `.txt` 文本文件。如果用户传入了图片文件,我们就主动报错。


  1. def process_text_file(filename):
  2.     # 检查文件名是否以 .txt 结尾
  3.     if not filename.endswith('.txt'):
  4.         # 如果不满足条件,主动引发一个 ValueError 异常
  5.         raise ValueError("只能处理 .txt 文件,你给的是:" + filename)

  6.     print(f"正在处理文件:{filename}")
  7.     # ... 这里是处理文件的代码 ...

  8. # 我们来调用这个函数试试
  9. try:
  10.     process_text_file('my_photo.jpg')  # 传入一个图片文件
  11. except ValueError as e:  # 捕获到我们主动引发的错误
  12.     print(f"出错了!错误信息是:{e}")
复制代码


运行上面的代码,你会看到输出:
出错了!错误信息是:只能处理 .txt 文件,你给的是:my_photo.jpg

如果没有raise,会发生什么?
如果我们只用 `if` 判断而不 `raise`,函数可能会默默地跳过这个错误,或者打印一行警告后继续执行后面的代码,这可能会导致更隐蔽的问题。而 `raise` 会立刻、明确地告诉调用者:“你给的数据不对,请处理这个错误!”

例子2:结合自定义异常(更清晰的错误分类)
有时候Python内置的错误类型(如 `ValueError`)不够具体,我们可以定义自己的错误类型。


  1. # 1. 首先,定义一个我们自己的异常类(继承自Exception就行)
  2. class AgeTooSmallError(Exception):
  3.     """当年龄太小时引发的异常"""
  4.     pass

  5. class AgeTooLargeError(Exception):
  6.     """当年龄太大时引发的异常"""
  7.     pass

  8. # 2. 使用我们自定义的异常
  9. def check_age(age):
  10.     if age < 18:
  11.         raise AgeTooSmallError(f"年龄{age}岁未满18岁,禁止访问。")
  12.     elif age > 120:
  13.         raise AgeTooLargeError(f"年龄{age}岁不太可能,请输入真实年龄。")
  14.     else:
  15.         print("年龄验证通过!")

  16. # 3. 调用函数,并精准地捕获不同的错误
  17. try:
  18.     user_age = int(input("请输入你的年龄:"))
  19.     check_age(user_age)
  20. except AgeTooSmallError as e:
  21.     print(f"访问被拒绝,原因:{e}")
  22. except AgeTooLargeError as e:
  23.     print(f"数据异常,请检查:{e}")
  24. except ValueError:
  25.     print("输入错误,请输入一个数字!")
复制代码


在这个例子里:
*   输入 `15` 会触发 `AgeTooSmallError`。
*   输入 `200` 会触发 `AgeTooLargeError`。
*   输入 `abc` 会触发Python内置的 `ValueError`(因为 `int()` 转换失败)。
*   输入 `25` 则会成功通过。

这样做的好处是,错误类型非常清晰,在外层 `try...except` 里可以针对 每一种具体的错误 进行不同的处理。

总结一下:
*   `raise` 是用来 主动引发异常/错误 的。
*   当程序逻辑遇到 无效、危险或不应当继续执行 的情况时,就应该用 `raise`。
*   你可以引发Python内置的异常类型(如 `ValueError`, `TypeError`),也可以引发自己定义的异常类型,让错误管理更清晰。

希望这个解释和例子能帮助你理解!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-12 19:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表