习惯使用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. 【Transact-SQL】找出不包含字母、不包含汉字的数据

    原文:[Transact-SQL]找出不包含字母.不包含汉字的数据 测试的同事,让我帮忙写个sql语句,找出表中xx列不包含汉字的行. 下面的代码就能实现. IF EXISTS(SELECT * FR ...

  2. 在docker下SQL Server attach mdf和ldf文件

    (DB:MyPost) USE masterGO-- Create database via attachCREATE DATABASE [MyPost]    ON ( FILENAME = N'C ...

  3. MySQL INNER JOIN子句介绍

    MySQL INNER JOIN子句介绍 MySQL INNER JOIN子句将一个表中的行与其他表中的行进行匹配,并允许从两个表中查询包含列的行记录. INNER JOIN子句是SELECT语句的可 ...

  4. 十、es6之扩展运算符 三个点(...)

    对象的扩展运算符 对象中的扩展运算符(...)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中 let bar = { a: 1, b: 2 }; let baz = { ...bar }; / ...

  5. opencv 加载pb

    1.错误1         Tensor's data type is not supported the type of Mul  is DF_Float 2.  错误2 type == " ...

  6. 关于NSOperationQueue,一个容易让初学者误解的问题

    凡是学习NSOperationQueue的人,都会遇到setMaxConcurrentOperationCount这个函数.在网上的许多博文中,都将setMaxConcurrentOperationC ...

  7. stm32 printf重定向

    printf函数调用fputc int fputc(int ch, FILE *p) { USART_SendData(USART1, ch); //重定向到串口 while(USART_GetFla ...

  8. dfs · leetcode-22.产生括号组?

    题面 Given n pairs of parentheses, write a function to generate all combinations of well-formed parent ...

  9. SAP应用真的不性感么

    这是一个问题. 上图的One Order是楼下一个部门领导让我给他的团队做的一个古老框架的session. 这个框架诞生于2000年,采用纯面向过程的思路开发.因为上世纪90年代ABAP开始引入对面向 ...

  10. CSS复合选择器和div盒子模型

    一.复合选择器(3种) 1.交集复合选择器 特点:由2个选择器组成,其中第一个必须是标签选择器,第二个是类或id选择器.两个选择器之间没有空格(有空格属于层级选择器) <h3 class=&qu ...