异常处理

异常处理

拟墨画扇 提交于 2019-12-04 23:13:41
目录 一、什么是异常 1.语法错误 2.逻辑错误 二 、异常的种类 1.常用异常 三、异常处理 1.异常处理语法格式 2.两个万能异常 3.无论是否发生异常,都执行finally内部代码 四、主动抛异常 1.主动抛出异常格式 2.断言 assert 一、什么是异常 异常就是程序运行时发生错误的信号(在程序出现错误时,则会产生一个异常,若程序没有处理它,则会抛出该异常,程序的运行也随之终止),在python中,错误触发的异常如下 1.语法错误 不可容忍的 2.逻辑错误 可以容忍,在程序的运行的时候某个地方逻辑有错误 二 、异常的种类 1.常用异常 AttributeError 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x IOError 输入/输出异常;基本上是无法打开文件 ImportError 无法引入模块或包;基本上是路径问题或名称错误 IndentationError 语法错误(的子类) ;代码没有正确对齐 IndexError 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] KeyError 试图访问字典里不存在的键 KeyboardInterrupt Ctrl+C被按下 NameError 使用一个还未被赋予对象的变量 SyntaxError Python代码非法,代码不能编译(个人认为这是语法错误,写错了) TypeError

SpringMvc 全局异常处理

自作多情 提交于 2019-12-04 20:38:31
MyExceptionHandler package exception; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.servlet.ModelAndView; @ControllerAdvice public class MyExceptionHandler {//不是控制器,仅仅是 用于处理异常的类 @ExceptionHandler(Exception.class) public ModelAndView handlerArithmeticException2(Exception e) { ModelAndView mv = new ModelAndView("error"); System.out.println(e + "============" + "该@ControllerAdvice中的异常处理方法,可以处理任何类中的异常"); mv.addObject("er", e); return mv; } } SecondSpringMVCHandler package handler;

异常过滤器的好坏(CLR)

烈酒焚心 提交于 2019-12-04 20:36:36
为什么有些语言支持它们而另一些不支持呢?把它们加到我的新语言里是个好主意吗?我应该什么时候使用过滤器和catch/rethrow?就像很多事情一样,异常过滤器有好的一面也有坏的一面… 什么是异常过滤器? CLR提供了许多高级语言可以构建的异常处理原语。有些是相当明显的,并且很容易映射到我们大多数人都知道和喜欢的语言结构:例如try/catch和try/finally。我敢猜测每个人都知道他们在做什么,但为了以防万一,让我们考虑一下C#: try { try { Console.Write(“1”); if (P) throw new ArgumentException(); } finally { Console.Write(“2”); } } catch (ArgumentException e) { Console.Write(“3”); } Console.Write(“4”); 如果P是真的,那么当然会打印出“1234”。 如果P为假,则它将打印“124”。 太棒了。 但是CLR还提供了另外两个EH原语:fault和filter。 fault子句很像finally子句;它在异常逃逸其关联的try块时运行。 区别在于finally子句也在控件正常离开try块时运行,而fault子句只在控件由于异常而离开try块时运行。 在上面的例子中,如果我们将“finally”替换为

CLR如何将SEH异常映射到托管异常类型

我只是一个虾纸丫 提交于 2019-12-04 20:08:24
托管异常处理构建在Windows操作系统的结构化异常处理之上,通常称为SEH。这意味着CLR了解如何在SEH和托管异常系统之间进行互操作,这是一个非常关键的点,因为SEH基于异常代码的概念,而托管异常处理则表示使用托管类型的异常。CLR相应地将SEH异常映射到托管异常,具体取决于引发SEH异常的方式和引发者。 注意:下面的讨论重点是运行在Windows操作系统上的桌面CLR。虽然讨论的目的是帮助理解这个概念,但是它使用了一些将来可能会改变的实现细节来说明。 托管代码中的同步异常(Synchronous exceptions) 当托管代码使用throw关键字引发异常时,它已经实例化了一个托管异常对象,该对象将表示引发的异常。这将传递给CLR,CLR在线程上设置一些与异常相关的状态,并调用Kernel32的RaiseException API来引发托管异常。此API的第一个参数是引发异常的SEH异常代码,CLR传递0xE0434F4D(托管异常SEH代码)。 这时,操作系统进入处理场景,开始在引发异常的线程堆栈上寻找SEH异常处理程序。CLR将其函数之一注册为OS的异常处理程序,以处理托管代码引起的异常。当它看到CLR SEH异常代码时,它知道正在引发托管异常,并继续查找线程状态以检索与异常相关的详细信息(例如,标识表示引发异常的托管异常对象)。 因此,在同步托管抛出的情况下

day7 异常处理 面向对象

亡梦爱人 提交于 2019-12-04 16:48:33
异常处理   try: 可能出错的代码 except Exception as e : 出错执行的代码   else: 没有出错执行的代码   finally:有没有出错,都会走的这里,可以没有这个finally ----------------------------------------- 以连接数据库为例 ----------------------------------- 用异常判断价格 -------------------------------------------------- 主动抛出异常 raise Exception("不在执行") 后面再有代码也不执行 ----------------------------------------------------------------------------------------------------------------------------- 面向对象   面向过程:第一步 做什么,第二部做什么么,顺着往下走   面向对象:就是针对一个整体         类:一个模型,一个图纸         对象:根据模型做出来的东西就是实例         实例:实例和对象是一回事         实例化:就是根据模型做具体东西的过程         self:本类对象。实例化出来的是谁,谁就是self

python 异常处理

孤者浪人 提交于 2019-12-04 15:52:57
1. try……except a = dict(name = 'wang') b = [1,2,3] try: # 尝试着执行try里面的代码 print(a) print(a['age']) print(b[100]) except (NameError,) as e: # 遇到NameError的错误,则抛出(可以将多个错误写在一行,用括号括起来,逗号隔开) print(e) except KeyError as e: # keyError print('key_error',e) except Exception as e: # 所有能抛出的异常都可以抛出 print('未知错误。') else: print('没有错误,才执行此句。可以省略') finally: print('总会执行此句。可以省略') 2. 自定义异常 # 自定义 异常 class NumError(Exception): # 创建一个异常类,继承自Exception def __init__(self,info): super().__init__(self) # 继承父类的方法 self.info = info def __str__(self): # __str__方法,打印对象即可直接打印返回值 return self.info num = [1,2,3,4,5] try: if len(num)

dubbo(四)异常处理

不打扰是莪最后的温柔 提交于 2019-12-04 15:26:26
dubbo的异常处理网上描述的文章很多,复制黏贴也不在少数.在这里记录下自己的一些体会. 还是带着问题(目录)来写吧. 1.dubbo官方推荐的异常处理方式是什么? 2.dubbo处理异常的逻辑是什么样的?为什么要这样处理? 3. 抛出自定义异常有哪些方式? 4.在dubbo:provider中设置filter="-exception", 去掉异常的filter会怎么样? 5.最终采用的异常处理方案 1.dubbo官方推荐的异常处理方式是什么? 在dubbo官方文档的 服务化最佳实践 中,推荐的处理方式如下: 2.dubbo处理异常的逻辑是什么样的?为什么要这样处理? dubbo的异常处理类是com.alibaba.dubbo.rpc.filter.ExceptionFilter 类,源码这里就不贴了.归纳下对异常的处理分为下面几类: 1)如果provider实现了GenericService接口,直接抛出 2)如果是checked异常,直接抛出 3)在方法签名上有声明,直接抛出 4)异常类和接口类在同一jar包里,直接抛出 5)是JDK自带的异常,直接抛出 6)是Dubbo本身的异常,直接抛出 7)否则,包装成RuntimeException抛给客户端 网上有些文章对7)的处理有疑问,不理解原因,其实就是为了防止客户端反序列化失败.前面几种情况都能保证反序列化正常. 3

dubbo异常处理(一)

北城余情 提交于 2019-12-04 15:25:58
dubbo的异常处理网上描述的文章很多,复制黏贴也不在少数.在这里记录下自己的一些体会. 还是带着问题(目录)来写吧. 1.dubbo官方推荐的异常处理方式是什么? 2.dubbo处理异常的逻辑是什么样的?为什么要这样处理? 3. 抛出自定义异常有哪些方式? 4.在dubbo:provider中设置filter="-exception", 去掉异常的filter会怎么样? 5.最终采用的异常处理方案 1.dubbo官方推荐的异常处理方式是什么? 在dubbo官方文档的 服务化最佳实践 中,推荐的处理方式如下: 2.dubbo处理异常的逻辑是什么样的?为什么要这样处理? dubbo的异常处理类是com.alibaba.dubbo.rpc.filter.ExceptionFilter 类,源码这里就不贴了.归纳下对异常的处理分为下面几类: 1)如果provider实现了GenericService接口,直接抛出 2)如果是checked异常,直接抛出 3)在方法签名上有声明,直接抛出 4)异常类和接口类在同一jar包里,直接抛出 5)是JDK自带的异常,直接抛出 6)是Dubbo本身的异常,直接抛出 7)否则,包装成RuntimeException抛给客户端 网上有些文章对7)的处理有疑问,不理解原因,其实就是为了防止客户端反序列化失败.前面几种情况都能保证反序列化正常. 3

java异常

人盡茶涼 提交于 2019-12-04 15:06:21
异常允许 允许我们强制程序停止运行,并告诉我们出现了什么问题 强制程序处理问题,并返回到稳定状态() 异常可能离异常被抛出的地方很远,也可能会跨越方法调用栈的许多层次。 通常::异常对象中仅有的信息就是异常类型,除此之外无其它内容 异常处理程序:try{}catch{} try{}后可以有多个catch{},每个catch子句相当于一个 接收且仅接收一个特殊类型的参数的方法。可在处理程序的内部使用标识符 (id1,id2 等)。 当try中捕捉到对应异常后,放入对应的catch子句中进行处理,一旦catch子句结束,则处理程序的查找过程结束。只有相匹配的catch子句才能得到执行。 在try中,许多不同的方法调用会产生类型相同的异常,你仅需提供一个针对此类型的异常处理程序 即可。 终止与异常: 终止模型:一旦异常被抛出,就表明错误无法挽回,也不能回来继续执行 恢复模型:异常处理程序修正错误,然后重新尝试调用出现问题的方法,并认为第二次能成功。 但恢复模型容易导致 耦合,恢复性的处理程序需要了解异常抛出的地点,势必要包含依赖于抛出位置的非通用性代码,增加了代码维护难度。 自己定义异常类,必须从已有的异常类继承,最好选择意思相近的异常类继承。 异常与记录,使用java.util.logging 工具将输出记录到日志中。 各级别按降序排列如下: SEVERE(最高值) WARNING