python和java的异常处理机制的对比

时间:2024-03-26 21:39:14

一、.Java 中的异常处理

java 中 处理异常有五个关键字:try catch finally throw throws 
try:将可能发生的异常存放到try块中 
catch:对异常进行捕获 
finally:无论是否出现异常都执行 
throw:在方法体中抛出异常 
throws:在方法上抛出异常

python和java的异常处理机制的对比

 

java 中 所有异常的父类为Throwable,Throwable 中有两个重要的子类:Error(错误)和 Exception(异常)

Error 是不可恢复的异常,比如:JVM 溢出。 
Exception 又分为两种异常:检查时异常和运行时异常。 
检查时异常的特点是需要客户程序员捕获异常(try)或抛出异常(throws)让调用着来处理,比如在IO编程、线程、xml解析应用中的异常都为检查时异常,需要我们手动捕获或抛出异常。

运行时异常指的是所有的RuntimeException及其子类,特点是无须客户程序员try或throws

在实际编程中,有时我们会自己定义一些异常来对异常进行处理,java 中 自定义检查时异常需要继承Exception 类并覆盖方法,自定义运行时异常需要继承 RuntimeException 并覆盖方法。

二、Python 中的异常处理

python 中的异常处理相比java来说,要简单一些,python 中使用四个关键字来处理异常 
try:捕获异常,类似于 java 中的 try 
except:处理异常,类似于 java 中的 catch 
finally:不管是否捕获到异常都会被执行,类似于 java 中 的 finally 
raise:抛出异常,类似于 java 中的 throw

异常执行流程: 
      try块存放可能出现的异常代码,如果没有异常发生,忽略except子句,try子句执行后结束;如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略,如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。不管try在执行时,是否发生了异常,finally块中的内容都会被执行。

异常 描述
AssertionError assert(断言)语句失败
AttributeError 访问一个对象没有的属性,比如foo.x ,foo没有x这个属性。
IOError 输入/输出异常,基本上是无法打开文件
ImportError 无法引入模块或者包,基本上是路径问题
IndentationError 语法错误,代码没有正确对齐
IndexError 下标访问越界,比如当x只有三个元素,却试图访问x[5]
KeyError 试图访问字典里不存在的键
KerboardInterrupt Ctrl + C 被按下
NameError 使用一个还未被赋值予对象的变量
SyntaxError Python代码非法,代码不能解释
TypeError 传入对象类型与要求的不符
UnboundLocalError 试图访问一个还未被设置的局部变量,基本上是由于另一个同名的全局变量,导致你以为正在访问它
ValueError 传入一个调用者不期望的值,即使值的类型是正确的

1.raise 抛出异常

2.try…except…

3.try….except…else

4.try…except…finally

5.传递异常

6.自定义异常