Java的try-catch结构与Python的try-except结构对比及使用疑问
Python 与 Java 异常捕获的对应实现
1. 获取异常实例对象
Python 中可以通过as关键字绑定捕获到的异常实例,对应 Java 中catch (SomeException se)里的se变量:
try: # 执行可能抛出异常的代码 pass except ExceptionClass1 as e: # e 就是捕获到的异常实例对象 print(e) # 效果等同于 Java 中的 System.out.println(se),打印异常的描述信息
2. 打印异常堆栈跟踪
需要用到 Python 标准库的traceback模块,其中traceback.print_exc()的效果完全等同于 Java 中的se.printStackTrace():
import traceback try: 1 / 0 # 示例触发异常 except ZeroDivisionError as e: traceback.print_exc() # 直接打印完整堆栈信息到控制台 # 若需要将堆栈信息转为字符串存储,可以用 traceback.format_exc() stack_info = traceback.format_exc()
3. 异常重抛操作
分为两种场景,和 Java 逻辑完全对应:
- 原样重抛当前捕获的异常:直接写
raise即可,不需要额外带参数,会保留原始异常的完整堆栈信息 - 包装为新异常重抛:可以通过
raise 新异常 from 原始异常的写法,将原始异常作为新异常的上下文抛出,对应 Java 中把原始异常作为cause包装抛出的逻辑
完整对应Java写法的Python示例
你给出的Java代码可以直接翻译为如下Python代码:
import traceback try: # something bad happens here pass except SomeException as se: traceback.print_exc() # 对应 se.printStackTrace(),打印堆栈 print(se) # 对应 System.out.println(se),打印异常信息 # 原样重抛 raise se # 如果要包装重抛可以写: # raise NewException("封装异常") from se
内容的提问来源于stack exchange,提问作者user1172468
相关产品推荐
相关产品推荐

