当前位置: 首页 > news >正文

pytyon之raise

在 Python 中,raise 语句用于显式地引发异常。通过 raise,你可以在程序中主动触发异常,以便在特定条件下中断程序的正常执行流程,并转移到异常处理逻辑。

基本语法

raise 语句的基本语法如下:

raise [ExceptionType([message])]
  • ExceptionType 是你要引发的异常类型,通常是内置的异常类(如 ValueErrorTypeError 等)或自定义的异常类。
  • message 是一个可选的字符串,用于描述异常的详细信息。

引发内置异常

def divide(a, b):if b == 0:raise ZeroDivisionError("Division by zero is not allowed")return a / btry:result = divide(10, 0)
except ZeroDivisionError as e:print(f"Caught an exception: {e}")

输出:

Caught an exception: Division by zero is not allowed

引发自定义异常

你可以定义自己的异常类,并在需要时引发它。

class MyCustomError(Exception):passdef check_value(value):if value < 0:raise MyCustomError("Negative value is not allowed")try:check_value(-1)
except MyCustomError as e:print(f"Caught a custom exception: {e}")

输出:

Caught a custom exception: Negative value is not allowed

重新引发异常

在异常处理块中,你可以使用 raise 重新引发捕获的异常,以便在更高层次的代码中进一步处理。

def process_data(data):try:result = int(data)except ValueError as e:print(f"Error converting data: {e}")raise  # 重新引发异常try:process_data("abc")
except ValueError as e:print(f"Caught an exception in outer block: {e}")

输出:

Error converting data: invalid literal for int() with base 10: 'abc'
Caught an exception in outer block: invalid literal for int() with base 10: 'abc'

引发异常并附带原始异常信息

在 Python 3 中,你可以使用 raise ... from ... 语法链式引发异常,并保留原始异常信息。

def process_data(data):try:result = int(data)except ValueError as e:raise RuntimeError("Failed to process data") from etry:process_data("abc")
except RuntimeError as e:print(f"Caught an exception: {e}")print(f"Original exception: {e.__cause__}")

输出:

Caught an exception: Failed to process data
Original exception: invalid literal for int() with base 10: 'abc'

总结

  • raise 语句:用于显式地引发异常。
  • 内置异常:可以引发 Python 内置的异常类型,如 ValueErrorTypeError 等。
  • 自定义异常:可以定义并引发自定义的异常类型。
  • 重新引发异常:在异常处理块中可以使用 raise 重新引发捕获的异常。
  • 链式引发异常:使用 raise ... from ... 语法链式引发异常,并保留原始异常信息。

http://www.mrgr.cn/news/22347.html

相关文章:

  • VMware安装Ubuntu虚拟机
  • Adobe Sensei——自动化视频编辑、特效应用和素材增强,通过AI技术快速优化视频内容,自动修复视频质量、自动添加背景音乐或字幕
  • Linux 开机自动启动服务
  • 缓存穿透问题
  • ASIO网络调试助手之二:网络通信原理
  • 梧桐数据库(WuTongDB):非聚簇索引的原理、实现方法及应用场景
  • 如何选择SDR无线图传方案
  • JavaScript 实用技巧
  • (一)【react-router v6】react-router v6基本用法,带你彻底搞懂前端路由原理、react-router V6带来了什么
  • AI编程工具合集
  • OPCUA-PLC
  • CCF刷题计划——因子化简
  • 每天五分钟玩转深度学习框架PyTorch:将nn的神经网络层连接起来
  • PHP-FPM 远程代码执行漏洞(CVE-2019-11043)复现
  • 想做窗套的业主注意了,要提前测量窗扇合页和墙面的距离
  • 【信号】信号的产生
  • LeetCode 热题 100 回顾3
  • 【C++】STL容器详解【下】
  • kubelet组件的启动流程源码分析
  • 【算法专场】模拟(下)