习惯使用java开发,在java开发里有异常链概念和重新抛出异常,在python是怎么实现的呢?

1.异常链

1.1.java实现

    public static void test1() throws Exception{
throw new Exception("test1 ex");
} public static void test2() throws Exception{
try {
test1();
} catch (Exception e) {
throw new Exception("test2 ex",e);
}
} public static void main(String[] args) throws Exception {
test2();
}

异常输出:

Exception in thread "main" java.lang.Exception: test2 ex
at com.epgis.gisserver.EText.test2(EText.java:)
at com.epgis.gisserver.EText.main(EText.java:)
Caused by: java.lang.Exception: test1 ex
at com.epgis.gisserver.EText.test1(EText.java:)
at com.epgis.gisserver.EText.test2(EText.java:)
... more

1.2.python实现

import traceback
def test1():
raise Exception("ex test1")
def test2():
try:
test1()
except Exception as e:
raise Exception("ex test2") from e
if __name__ == '__main__':
test2()

异常输出:

Traceback (most recent call last):
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test2
test1()
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test1
raise Exception("ex test1")
Exception: ex test1 The above exception was the direct cause of the following exception: Traceback (most recent call last):
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in <module>
test2()
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test2
raise Exception("ex test2") from e
Exception: ex test2

2.重新抛出异常

2.1.java实现

	public static void test1() throws Exception{
throw new Exception("test1 ex");
} public static void test2() throws Exception{
try {
test1();
} catch (Exception e) {
throw new Exception("test2 ex");
}
} public static void main(String[] args) throws Exception {
test2();
}

异常输出:

Exception in thread "main" java.lang.Exception: test2 ex
at com.epgis.gisserver.EText.test2(EText.java:)
at com.epgis.gisserver.EText.main(EText.java:)

可以看出已经将test1的异常给抛弃

2.2.python实现

import traceback
def test1():
raise Exception("ex test1")
def test2():
try:
test1()
except Exception as e:
raise Exception("ex test2") from None
if __name__ == '__main__':
test2()

异常输出:

Traceback (most recent call last):
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in <module>
test2()
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test2
raise Exception("ex test2") from None
Exception: ex test2

与java不同的地方一定要from None

如果不使用from会怎么样?

import traceback
def test1():
raise Exception("ex test1")
def test2():
try:
test1()
except Exception as e:
raise Exception("ex test2")
if __name__ == '__main__':
test2()

异常输出:

Traceback (most recent call last):
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test2
test1()
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test1
raise Exception("ex test1")
Exception: ex test1 During handling of the above exception, another exception occurred: Traceback (most recent call last):
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in <module>
test2()
File "F:/MyProgram/pythonProgram/Nike/ex_test.py", line , in test2
raise Exception("ex test2")
Exception: ex test2

test1的异常还是输出了

python异常链的更多相关文章

  1. python 异常

    引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...

  2. java异常丢失及异常链

    1.Java中异常丢失的情况: 先定义三个异常: public class ExceptionA extends Exception { public ExceptionA(String str) { ...

  3. #21 Python异常

    前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...

  4. Python异常和异常处理

    Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...

  5. java 异常链

    1.) 常常会想要在捕获一个异常后抛出另一个异常,并且希望把原始异常的信息保存下来,被称为异常链. 2.)Throwable子类在构造器中可以接受一个cause(因由)对象作为参数.这个cause就是 ...

  6. “全栈2019”Java异常第十五章:异常链详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...

  7. python——异常except语句用法与引发异常

    except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...

  8. 笔记-python异常信息输出

    笔记-python异常信息输出 1.      异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...

  9. 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链

    不多说,直接上干货! 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失.同样的道理,计算机的世界也是不完美的,异常情况随时都会发 ...

随机推荐

  1. ASP.NET Core 入门(3)(单元测试Xunit及Shouldly的使用)

    一.本篇简单介绍下在ASP.NET Core项目如何使用单元测试,例子是使用VS自带的Xunit来测试Web API接口,加上一款开源的断言工具Shouldly,方便写出更简洁.可读行更好的测试代码. ...

  2. sql 视图的好处

    第一点:使用视图,可以定制用户数据,聚焦特定的数据. 解释: 在实际过程中,公司有不同角色的工作人员,我们以销售公司为例的话,采购人员,可以需要一些与其有关的数据,而与他无关的数据,对他没有任何意义, ...

  3. phpstorm+xdebug+mvc

    前一段时间自己琢磨出来,今天又给忘了,还去t00ls发帖.... 写到这里备忘 拿这个yxcms举例子 版本: yxcms1.2.1 源码:http://pan.baidu.com/s/1pJM1CP ...

  4. win7登录密码破解方法(不用U盘)

    前提:1.不借助U盘等工具.2.已将win7登录账户为test,密码为123456 1.将电脑开机关机几次,进入以下界面 2.然后点击启动修复(推荐),进入以下界面 3.接着就进入到以下界面,然后点击 ...

  5. 解决spring-boot-maven-plugin插件打包,springboot启动时报找不到主main问题

    一:遇到的问题及解决方法 最近在搭建一个新项目时,使用spring-boot-maven-plugin插件打包,springboot项目在发布后启动时遇到找不到主main问题. 遇到这个问题当时感觉本 ...

  6. Linux下安装php报错:libxml2 not found. Please check your libxml2 installation

    ubuntu/debian: apt-get install libxml2-dev centos/redhat: yum install libxml2-devel

  7. 服务器IP与个人IP的特点

    服务器IP:系统类型.开放的端口及运行的服务.C段同类机器数量.是否机房.IDC服务商 个人IP:系统类型.开放的端口及运行的服务……

  8. idou老师教你学Istio 25:如何用istio实现监控和日志采集

    大家都知道istio可以帮助我们实现灰度发布.流量监控.流量治理等功能.每一个功能都帮助我们在不同场景中实现不同的业务.那Istio是如何帮助我们实现监控和日志采集的呢? 这里我们依然以Bookinf ...

  9. python3 准备

    一.前言 1.Python是著名的“龟叔”Guido van Rossum发明的 2.python分为python2和python3两大版本,python2渐渐被淘汰,建议使用python3 3.py ...

  10. Java基础 static限定符的使用 以及【 static实现的 singleton(单例)设计模式】

    static实现的 singleton(单例)设计模式 /** static实现的 singleton设计模式 , 使得一个类只能够创建一个static对象 */ 模板设计结构: package Co ...