python异常链
习惯使用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异常链的更多相关文章
- python 异常
引用一段来自菜鸟教程的文章:http://www.runoob.com/python/python-exceptions.html Python 异常处理 python提供了两个非常重要的功能来处理p ...
- java异常丢失及异常链
1.Java中异常丢失的情况: 先定义三个异常: public class ExceptionA extends Exception { public ExceptionA(String str) { ...
- #21 Python异常
前言 运行程序时经常遇到各种错误,例如:ImportError(导入模块错误).IndexError(索引错误).NameError(变量错误).SyntaxError(语法错误).Indentati ...
- Python异常和异常处理
Python异常和异常处理2017年12月20日 22:17:08 Megustas_JJC 阅读数:114 标签: python 异常处理 更多 个人分类: Python 版权声明:本文为博主原创文 ...
- java 异常链
1.) 常常会想要在捕获一个异常后抛出另一个异常,并且希望把原始异常的信息保存下来,被称为异常链. 2.)Throwable子类在构造器中可以接受一个cause(因由)对象作为参数.这个cause就是 ...
- “全栈2019”Java异常第十五章:异常链详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java异 ...
- python——异常except语句用法与引发异常
except: #捕获所有异常 except: <异常名>: #捕获指定异常 except:<异常名1,异常名2):捕获异常1或者异常2 except:<异常名>,< ...
- 笔记-python异常信息输出
笔记-python异常信息输出 1. 异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...
- 牛客网Java刷题知识点之什么是异常、异常处理的原理是什么、为什么要使用异常、异常体系、运行时异常、普通异常、自定义异常、异常链
不多说,直接上干货! 在这个世界不可能存在完美的东西,不管完美的思维有多么缜密,细心,我们都不可能考虑所有的因素,这就是所谓的智者千虑必有一失.同样的道理,计算机的世界也是不完美的,异常情况随时都会发 ...
随机推荐
- IdentityServer4密码模式接入现有用户数据表
具体接入identityserver请看文档,这里只简单列举部分步骤 1.创建一个web项目,引入Identityserver4的nuget包 2.新建一个类,实现IResourceOwnerPass ...
- [C#] LINQ之SelectMany和GroupJoin
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- buffer 与 cache 的区别
Buffer 和 Cache buffer 和 cache 同样作为缓存,他们之间有什么区别呢? 简单来说,buffer 是即将要写入磁盘的缓存,而 cache 是从磁盘中读出来放到缓存的 参考来自: ...
- nodejs入门API之url模块+querystring模块
关于URL的一些基础内容 URL模块的API解析 URL的参数URLSearchParams类 querystring模块 一.关于URL的一些基础内容 1.1 定义: 在WWW上,每一信息资源都有统 ...
- Python UDP 通信
UDP_Client.py import socket # 创建一个 UDP 套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DG ...
- S2-045、S2-046
前言 S2-045依然是一个Ognl表达式注入导致的RCE漏洞,且漏洞很严重.另外,还是建议读者阅读本篇文章前先看下系列文章的第一篇. 正文 依然是第一篇文章中讲过,StrutsPrepareFilt ...
- Go 缓冲信道
缓冲信道 语法结构:cap为容量 ch := make(chan type, cap) 缓冲信道支持len()和cap(). 只能向缓冲信道发送容量以内的数据. 只能接收缓冲信道长度以内的数据. 缓冲 ...
- 【问题】Debian安装、配置sources.list、安装VMware Tools
Debian安装: 我采用的是纯命令行安装方式.具体安装过程网上一大堆,不介绍了.需要强调一点,那个SSH Server必须选,否则像XShell这样的客户端不能访问Debian. 配置sources ...
- keepalived+lvs+usp安装实施文档
操作系统平台:RedHat6.4 x86_64 软件:LVS+keepalived LVS+Keepalived 介绍 LVS LVS是Linux Virtual Server的简写,意即Linux ...
- jade-包含
模板继承是子文件,父文件继承和代码复用的问题,那模版包含是文件与文件之间,文件与区块之间,这种区块内嵌的东西 继承的关键字是extends, 那模板包含使用的是include这个关键字 head.ja ...