一、.Java 中的异常处理
java 中 处理异常有五个关键字:try catch finally throw throws
try:将可能发生的异常存放到try块中
catch:对异常进行捕获
finally:无论是否出现异常都执行
throw:在方法体中抛出异常
throws:在方法上抛出异常
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.自定义异常