跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Python怎么抛出异常_raise语句与自定义异常类编写

raise需在异常上下文中复抛才不崩;单独用须带异常实例或类,如raise ValueError("用户名不能为空");自定义异常必须继承Exception;传参保留traceback用raise NewException() from e;raise后代码不执行。 raise 语句怎么用才不崩程序 直接
raise
不带参数,只能在异常处理上下文中复抛当前异常;单独用必须带异常实例或类。常见错误是写成
raise ValueError
(缺括号),结果抛出的是类对象本身,不是异常实例,Python 会报
TypeError: exceptions must derive from BaseException
。 正确写法:
raise ValueError("用户名不能为空")
或
raise ValueError()
想复用已有异常信息?用
raise
单独一行,但确保它在
except
块里 不要用
raise "字符串"
—— 这在 Python 3 中直接语法错误 自定义异常类为什么必须继承 Exception 不继承
Exception
或其子类(比如
ValueError
),抛出时会被当成普通对象,
except
捕获不到。最简定义只需
pass
,但建议加文档说明用途。 标准写法:
class UserNotFoundError(Exception): """找不到指定用户ID时抛出""" pass
想带额外字段(如错误码)?在
__init__
里接收并赋值,别忘了调
super().__init__(message)
别继承
BaseException
—— 除非你真要拦截
KeyboardInterrupt
或
SystemExit
,否则会破坏正常退出逻辑 raise 和 except 之间怎么传参才不丢信息 捕获后重新抛出时,如果只写
raise NewException()
,原始 traceback 就丢了。调试时看不到最初出错位置,排查成本陡增。 保留完整链路:用
raise NewException(...) from e
(推荐),或
raise NewException(...) from None
(显式切断) 旧写法
raise NewException, args, sys.exc_info()[2]
是 Python 2 风格,Python 3 已废弃 如果只是想加点上下文,又不想改异常类型,直接
raise
空语句最安全 raise 在函数返回逻辑里容易被忽略的坑 很多人把
raise
当成“return 的替代”,但它的控制流是立即中断,后续代码不会执行。常见误判是以为
raise
后还能继续做清理,或者和
return
混用导致逻辑跳过。 Python 3.14.3 微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。 下载 立即学习 “ Python免费学习笔记(深入) ”; 函数中
raise
后的代码永远不运行,哪怕它看起来“离得不远” 需要清理资源?用
try/finally
,别指望
raise
后面的语句 别在同一个分支里又
return
又
raise
—— 静态检查工具会报警,运行时也容易漏覆盖 真正难的不是写
raise
,而是判断该不该在这里中断、该不该让上层看到原始栈、以及异常消息里哪些信息对调用方有用——这些没法靠语法检查出来。

相关文章