习惯使用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. Entity framework 意外删除了表,如何在不影响其它表的情况下恢复回来

    关于EntityFramework数据迁移原理 查询数据库的表"__MigrationHistory",遍历代码库的Migrations文件夹下的所有文件,如果文件不在__Migr ...

  2. JavaScript 和 Java 是完全不同的语言

    JavaScript 和 Java 是完全不同的语言这个是定论,两者是概念http://www.gzaos.com还是设计都不同. JavaScript 在 1995 年由 Brendan Eich ...

  3. Java 之 IDEA 的 Debug 追踪

    使用 IDEA 的断点调试功能,查看程序的运行过程. 1.在有效代码行,点击行号右边的空白区域,设置断点,程序执行到断点将停止,我们可以手动来运行程序 2.点击 Debug 运行模式 3.程序停止在断 ...

  4. asp.net mvc 防止跨站攻击

    View @using (Html.BeginForm("Contact","Home",FormMethod.Post)) { @Html.AntiForge ...

  5. U盘不能复制4G以上的单个文件如何处理?

    制作好雨后清风U盘启动盘后,有朋友在将雨后清风系统镜像文件拷贝传输至U盘时,会发现U盘提示文件过大,无法进行传输,但是U盘的剩余存储空间明显还足够,这是怎么回事呢? 其实这是U盘文件系统格式的原因,如 ...

  6. ES date_histogram 聚合

    如下 GET cars/index/_search { "size":0, "aggs": { "sales": { "date_ ...

  7. html和css的一些常用标签使用

    HTML(HyperText Mark-up Language)超文本标签语言 <!DOCTYPE html> <!--声明这是一个html文档--> <html> ...

  8. Netty4实现JTT809对接

    网上的使用的netty版本过老,最近自己接触到这一块,重新写了一个 服务器流程 1,判定报文起始和结束标识 ,2去掉头尾标识进行转义,3,去掉CRC码进行CRC计算,4读取报文头,(5,如果加密则解密 ...

  9. Python一些细节

    1.python set() dict() 有序问题,不同版本之间的差异,与Java/C++的对比 https://www.cnblogs.com/niuxichuan/p/11608386.html ...

  10. go语言defer关键字背后的实现,语法,用法

    原文: https://tiancaiamao.gitbooks.io/go-internals/content/zh/03.4.html ------------------------------ ...