异常(Exception)处理

合集下载

Java异常(Exception)处理以及常见异常总结

Java异常(Exception)处理以及常见异常总结

Java异常(Exception)处理以及常见异常总结⽬录前⾔异常简介异常类型总结前⾔很多事件并⾮总是按照⼈们⾃⼰设计意愿顺利发展的,经常出现这样那样的异常情况。

例如:你计划周末郊游,计划从家⾥出发→到达⽬的→游泳→烧烤→回家。

但天有不测风云,当你准备烧烤时候突然天降⼤⾬,只能终⽌郊游提前回家。

“天降⼤⾬”是⼀种异常情况,你的计划应该考虑到这样的情况,并且应该有处理这种异常的预案。

计算机程序的编写也需要考虑处理这些异常情况。

异常(exception)是在运⾏程序时产⽣的⼀种异常情况,已经成为了衡量⼀门语⾔是否成熟的标准之⼀。

⽬前的主流编程语⾔java也提供了异常处理机制。

异常简介Java中的异常⼜称为例外,是⼀个在程序执⾏期间发⽣的事件,它中断正在执⾏程序的正常指令流。

为了能够及时有效地处理程序中的运⾏错误,必须使⽤异常类,这可以让程序具有极好的容错性且更加健壮。

在 Java 中⼀个异常的产⽣,主要有如下三种原因:1. Java 内部错误发⽣异常,Java 虚拟机产⽣的异常。

2. 编写的程序代码中的错误所产⽣的异常,例如空指针异常、数组越界异常等。

3. 通过 throw 语句⼿动⽣成的异常,⼀般⽤来告知该⽅法的调⽤者⼀些必要信息。

Java 通过⾯向对象的⽅法来处理异常。

在⼀个⽅法的运⾏过程中,如果发⽣了异常,则这个⽅法会产⽣代表该异常的⼀个对象,并把它交给运⾏时的系统,运⾏时系统寻找相应的代码来处理这⼀异常。

我们把⽣成异常对象,并把它提交给运⾏时系统的过程称为拋出(throw)异常。

运⾏时系统在⽅法的调⽤栈中查找,直到找到能够处理该类型异常的对象,这⼀个过程称为捕获(catch)异常。

例 1为了更好地理解什么是异常,下⾯来看⼀段⾮常简单的 Java 程序。

下⾯的⽰例代码实现了允许⽤户输⼊ 1~3 以内的整数,其他情况提⽰输⼊错误。

package io.renren.config;import java.util.Scanner;/*** Created by LiYangYong*/public class TestException {public static void main(String[] args) {System.out.println("请输⼊您的选择:(1~3 之间的整数)");Scanner input = new Scanner(System.in);int num = input.nextInt();switch (num) {case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("error");break;}}}正常情况下,⽤户会按照系统的提⽰输⼊ 1~3 之间的数字。

WebAPi之异常处理(Exception)以及日志记录(NLog)(十六)

WebAPi之异常处理(Exception)以及日志记录(NLog)(十六)

WebAPi之异常处理(Exception)以及⽇志记录(NLog)(⼗六)前⾔上⼀篇⽂章我们介绍了关于⽇志记录⽤的是Log4net,确实也很挺强⼤,但是别忘了我们.NET有专属于我们的⽇志框架,那就是NLog,相对于Log4net⽽⾔,NLog可以说也是⼀个很好的记录⽇志的框架,并且其中的异步⽇志等都有⾮常⼤的改善,本⽂借此⽤了最新的NLog来在Web APi中进⾏记录⽇志。

NLog第⼀步则是下载我们需要的程序包,包括程序集以及配置⽂件利⽤NLog记录⽇志同样可以实现如我们上篇⽂章利⽤Log4net来实现的那样,所以在这⾥就不多说,下⾯我们来讲另外⼀种⽅式,那就是利⽤.NET内置的跟踪级别类来进⾏记录⽇志。

从⽽达到我们所需。

在NLog.config配置⽂件中,我们添加如下进⾏⽇志的记录【注意:只是简单的利⽤了NLog,它还是⽐较强⼤,更多的详细内容请到官⽹或通过其他途径进⾏学习】<targets><target name="logfile" xsi:type="File" fileName="${basedir}/WebAPiNLog/${date:format=yyyyMMdd}.log" /> //在根⽬录下的WebAPiNlog⽂件下⽣成⽇志</targets><rules><logger name="*" minlevel="Trace" writeTo="logfile" /></rules>第⼆步既然是利⽤.NET内置的跟踪级别类来实现,那么我们就需要实现其接⼝ ITraceWriter ,该接⼝需要实现如下⽅法// 摘要:// 当且仅当在给定 category 和 level 允许跟踪时,调⽤指定的 traceAction 以允许在新的 System.Web.Http.Tracing.TraceRecord// 中设置值。

关于Python中异常(Exception)的汇总

关于Python中异常(Exception)的汇总

关于Python中异常(Exception)的汇总前⾔Exception类是常⽤的异常类,该类包括StandardError,StopIteration, GeneratorExit, Warning等异常类。

python中的异常使⽤继承结构创建,可以在异常处理程序中捕获基类异常,也可以捕获各种⼦类异常,python中使⽤try...except语句捕获异常,异常⼦句定义在try⼦句后⾯。

Python中的异常处理异常处理的语句结构try:<statements> #运⾏try语句块,并试图捕获异常except <name1>:<statements> #如果name1异常发现,那么执⾏该语句块。

except (name2, name3):<statements> #如果元组内的任意异常发⽣,那么捕获它except <name4> as <variable>:<statements> #如果name4异常发⽣,那么进⼊该语句块,并把异常实例命名为variableexcept:<statements> #发⽣了以上所有列出的异常之外的异常else:<statements> #如果没有异常发⽣,那么执⾏该语句块finally:<statement> #⽆论是否有异常发⽣,均会执⾏该语句块。

说明else和finally是可选的,可能会有0个或多个except,但是,如果出现⼀个else的话,必须有⾄少⼀个except。

不管你如何指定异常,异常总是通过实例对象来识别,并且⼤多数时候在任意给定的时刻激活。

⼀旦异常在程序中某处由⼀条except⼦句捕获,它就死掉了,除⾮由另⼀个raise语句或错误重新引发它。

raise语句raise语句⽤来⼿动抛出⼀个异常,有下⾯⼏种调⽤格式:raise #可以在raise语句之前创建该实例或者在raise语句中创建。

Oracle_存储过程exception异常处理大全及实例经典最终

Oracle_存储过程exception异常处理大全及实例经典最终

Oracle_存储过程exception异常处理大全及实例经典最终异常处理是编程中非常重要的一部分,它允许我们处理代码中可能出现的错误和异常情况,以确保程序的稳定性和正确性。

在Oracle存储过程中,我们可以使用异常处理来捕获并处理各种类型的异常。

下面是Oracle存储过程中常见的一些异常以及它们的处理方式:1.NO_DATA_FOUND:当SELECT语句或游标未找到任何数据时引发此异常。

通常使用一个特殊值或条件来处理这种异常,例如使用NULL值或设置默认值。

示例:```sqlDECLAREv_data NUMBER;BEGINSELECT column INTO v_data FROM table WHERE condition;--处理数据EXCEPTIONWHENNO_DATA_FOUNDTHENv_data := 0; -- 设置默认值为0END;```2.TOO_MANY_ROWS:当SELECT语句或游标返回多行数据时引发此异常。

通常使用限制条件来确保只返回一行数据,或者使用游标来处理多行数据。

示例:```sqlDECLARECURSOR c_data IS SELECT column FROM table WHERE condition;v_data NUMBER;BEGINOPEN c_data;FETCH c_data INTO v_data;IF c_data%FOUND THEN--处理数据...ELSE--处理异常情况...ENDIF;CLOSE c_data;EXCEPTIONWHENTOO_MANY_ROWSTHEN--处理异常情况...END;```3.DUP_VAL_ON_INDEX:当INSERT或UPDATE语句违反唯一性约束时引发此异常。

通常使用异常处理块来处理该异常或使用MERGE语句来处理重复数据。

示例:```sqlBEGININSERT INTO table (column1, column2) VALUES (value1, value2);EXCEPTIONWHENDUP_VAL_ON_INDEXTHEN--处理异常情况...END;```4.VALUE_ERROR:当数据类型转换错误或算术溢出时引发此异常。

oracle中exception用法

oracle中exception用法

oracle中exception用法在Oracle数据库中,Exception是一个用于处理程序中发生的特定异常情况的机制。

它允许开发人员在出现异常时采取适当的措施,以确保程序的正确性和稳定性。

在Oracle中,Exception通常与Error对象一起使用,用于捕获和处理异常情况。

一、Exception的分类在Oracle中,Exception可以分为两种类型:标准异常(StandardException)和自定义异常(User-DefinedException)。

标准异常是Oracle数据库中预定义的异常类型,用于表示常见的程序错误和异常情况。

而自定义异常则是用户根据需要定义的异常类型,用于处理特定的程序逻辑错误。

二、Exception的用法在Oracle中,Exception的用法主要包括以下几个方面:1.声明异常处理程序首先,需要在程序中声明异常处理程序,以便在出现异常时能够进行处理。

可以使用EXCEPTION_INIT数据类型来声明异常处理程序,并指定相应的异常类型。

例如:BEGIN--可能出现异常的代码块EXCEPTIONWHENOTHERSTHEN--异常处理逻辑END;其中,OTHERS是表示所有未指定类型的异常的通用异常类型。

当出现异常时,程序会自动调用相应的异常处理程序。

2.捕获和处理异常在声明了异常处理程序之后,可以在代码中捕获和处理异常。

可以使用EXCEPTION_OBJECT数据类型来捕获异常对象,并使用RAISE_APPLICATION_ERROR方法来抛出自定义异常。

例如:BEGIN--可能出现异常的代码块EXCEPTIONWHENOTHERSTHEN--捕获异常对象并处理逻辑RAISE_APPLICATION_ERROR(-20001,'发生未知错误');END;其中,-20001是自定义的异常编号,可以根据实际情况进行调整。

通过捕获和处理异常,可以确保程序的稳定性和正确性。

异常处理

异常处理

三、抛出异常
前面只是说明了如何获取Java运 前面只是说明了如何获取Java运 Java 行时被系统引发的异常。同时, 行时被系统引发的异常。同时,程序 还可以用throw语句引发明确的异常, throw语句引发明确的异常 还可以用throw语句引发明确的异常, throws语句来标明一个成员函数可 用throws语句来标明一个成员函数可 能抛出的各种异常。
Exception类的主要方法
1.public Exception() 2.public Exception(String s) 3.public String toString()//返回异常类的信息 4.public void printStackTrace()//打印输出当前 例外对象的堆栈使用轨迹,也就是程序先后 调用执行了哪些对象或类的哪些方法,使得 运行过程中产生了这个例外对象。
四、自定义异常
尽管Java的内置异常处理大多数常见错误 尽管Java的内置异常处理大多数常见错误,你 Java的内置异常处理大多数常见错误, 也许希望创建自己的异常类型来处理所应用的特 殊情况。做到这点非常简单:只要定义 Exception的一个子类就可以了 Exception当然 的一个子类就可以了( Exception 的一个子类就可以了 ( Exception 当然 Throwable的一个子类 的一个子类) 是 Throwable 的一个子类 ) 。 你的子类不需要实 际执行什么——它们在类型系统中的存在允许你 际执行什么 它们在类型系统中的存在允许你 把它们当成异常使用。 把它们当成异常使用。 Exception类自己没有定义任何方法。当然, Exception类自己没有定义任何方法。当然, 类自己没有定义任何方法 它继承了Throwable提供的一些方法。 Throwable提供的一些方法 它继承了Throwable提供的一些方法。因此所有 异常,包括你创建的,都可以获得Throwable Throwable定 异常,包括你创建的,都可以获得Throwable定 义的方法, 义的方法,

unhandled exception的解决方法

unhandled exception的解决方法

unhandled exception的解决方法"Unhandled exception" 是指在程序执行过程中发生了异常(Exception),但该异常没有被程序的异常处理机制捕获和处理。

这通常会导致程序崩溃或以不受控制的方式终止。

解决"Unhandled exception" 的方法通常包括以下步骤:1. 查看异常信息:程序通常会提供有关发生异常的详细信息,包括异常的类型、位置等。

查看这些信息可以帮助定位问题。

2. 使用try-catch 块捕获异常:在程序的关键部分使用try-catch 块可以捕获异常并进行适当的处理,而不是让程序崩溃。

这有助于提高程序的稳定性。

```csharptry{// 可能引发异常的代码}catch (Exception ex){// 处理异常的代码Console.WriteLine($"发生异常:{ex.Message}");}```3. 记录异常信息:在捕获异常时,可以将异常信息记录下来,以便更好地理解问题的根本原因。

这对于调试和修复异常非常有帮助。

4. 确保资源释放:如果异常发生在使用资源(如文件、数据库连接等)的代码块中,确保在异常发生时释放这些资源,以避免资源泄漏。

5. 代码审查:审查程序的代码,检查潜在的错误和边界条件。

可能存在的空引用、数组越界、除零等错误可能导致异常。

6. 使用异常过滤器:在catch 块中使用异常过滤器,可以根据异常的类型或其他条件选择是否处理该异常。

```csharpcatch (Exception ex) when (ex is CustomException){// 处理特定类型的异常}```7. 全局异常处理:在程序的入口点或其他适当位置设置全局异常处理,以捕获未被处理的异常,记录信息并执行适当的操作。

```csharpstatic void Main(){AppDomain.CurrentDomain.UnhandledException += UnhandledExceptionHandler;// 其他初始化和程序逻辑}static void UnhandledExceptionHandler(object sender, UnhandledExceptionEventArgs e) {Exception ex = e.ExceptionObject as Exception;Console.WriteLine($"未处理的异常:{ex?.Message}");// 其他处理逻辑}```8. 使用调试工具:使用调试工具(如调试器、日志记录工具)来追踪程序的执行过程,以便更容易发现和解决异常。

异常处理基本流程七步

异常处理基本流程七步

异常处理基本流程七步第一步:捕获异常异常处理的第一步是捕获异常。

当我们预料到某一段代码可能会抛出异常时,我们可以使用try语句来捕获这个异常。

在try语句中的代码块中执行可能会出现异常的代码,一旦抛出异常,会跳转到except语句块中进行处理。

第二步:处理异常在except语句块中,我们可以对捕获到的异常进行处理。

我们可以根据不同的异常类型,进行相应的处理。

比如可以输出异常信息、记录日志、返回特定的值等。

在处理异常的过程中,我们可以选择让程序继续执行或者终止程序。

第三步:抛出异常有时候,在处理异常时,我们可能并不知道如何处理这个异常,或者希望让调用者来处理这个异常。

这时候可以使用raise语句来手动抛出异常。

通过raise语句,我们可以显示地抛出异常,并将异常传递给调用者。

第四步:清理操作在异常处理之后,我们有时候需要进行一些清理操作。

比如关闭文件、释放资源、恢复状态等。

为了确保程序的稳定性,我们应该在finally语句块中执行这些清理操作。

finally语句块中的代码会在try语句块中的代码执行完毕之后无论是否发生异常都会执行。

第五步:自定义异常除了使用系统定义的异常类型外,我们还可以自定义异常类型。

通过自定义异常类型,我们可以更好地组织和管理异常情况。

通常我们可以通过定义一个类,并继承自Exception类来创建自定义异常类型。

在程序中抛出自定义异常,可以使代码更加条理清晰。

第六步:异常链在进行异常处理时,有时候一个异常会引发另一个异常,这种情况称为异常链。

为了更好地处理异常链,我们可以使用raise语句来将一个异常传递给另一个异常。

通过这种方式,可以很容易地追踪异常的传递过程,更好地定位问题所在。

第七步:记录日志在程序中良好的记录日志是非常有必要的。

通过记录日志,我们可以更好地追踪程序运行的过程,了解程序中可能存在的异常情况。

在异常处理时,输出异常信息到日志中,可以帮助我们更好地定位、分析问题,并进行及时的处理。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

异常处理的优点
把错误处理代码从常规代码中分离出来
按错误类型和差别分组
对无法预测的错误进行捕获和处理
克服了传统方法的错误信息有限的问题
把错误传播给调用堆栈
系统预定义异常对象
Throwable Exception Error VirtualMachineError IOException ArithmeticException NullPointerException ClassNotFoundException
多重catch块
一段代码可能会引发多种类型的异常 当引发异常时,会按顺序来查看每个 catch 语句,并执行第一个与异常类型匹配的 catch语句 执行其中的一条 catch 语句之后,其后的 catch 语句将被忽略
抛出异常
如果在当前环境无法解决一个异常,就要 将其抛出,把异常交给调用者处理
练习
编写类ExceptionTest2:
– –

定义两个方法:go()和main() 在go方法中声明要抛出异常,在该方法体内, 抛出一个Exception对象 在main()方法中,调用go方法,使用try/catch 捕获go方法中抛出的异常
用户自定义异常对象
系统预定义异常类代表了程序运行过程中可能产生的绝大多 数异常。如果希望记录和应用相关的错误信息,则可创建自 己的异常类。该类的定义和普通类无太大区别,只需继承 Exception类或RuntimeException类即可。例如:
Java异常的使用 异常的使用
对非运行时异常必须捕获或声明。对运行时异常, 对非运行时异常必须捕获或声明。对运行时异常,若不能预测它 何时发生,程序可不作处理,而是交给Java运行时系统来处理; 运行时系统来处理; 何时发生,程序可不作处理,而是交给 运行时系统来处理 若能预知它可能发生的地点和时间,则应在程序中处理, 若能预知它可能发生的地点和时间,则应在程序中处理,而不应 简单地交给运行时系统。 简单地交给运行时系统。 异常可以人为地抛出, 语句。 异常可以人为地抛出,用throw new 语句。 异常可以是系统已经定义好的,也可以是用户自己定义的。 异常可以是系统已经定义好的,也可以是用户自己定义的。用户 自己定义的异常一定继承自Throwable或Exception类。 自己定义的异常一定继承自 或 类 在自定义异常类时, 在自定义异常类时,如果它所对应的异常事件通常总是在运行时 产生,而且不容易预测它将在何时何地发生, 产生,而且不容易预测它将在何时何地发生,可以将它定义为运 行时异常,否则应定义为非运行时异常。 行时异常,否则应定义为非运行时异常。 应该使用finally语句为异常处理提供统一的出口。 语句为异常处理提供统一的出口。 应该使用 语句为异常处理提供统一的出口
public class MyProjException extends Exception { …… }
自定义异常
通过继承ng.Exception类声明自己的 异常类。 在方法适当的位置生成自定义异常的实例, 并用throw抛出。 在方法的声明部分用throws声明该方法可 能抛出的异常。
异常(Exception)处理 第七章 异常(Exception)处理
异常
运行期出现的错误 运行期 (注意看异常信息,看名字,看行号) 健壮性
代码
public class HelloWorld { public static void main (String args[]) { int i = 0; String greetings [] = { "Hello!","No","WORLD!"}; while (i < 4) { System.out.println (greetings[i]); i++; } } }
异常的执行流程
try{ 1 2 3 } catch(Exception e){ 4 } 5
正常顺序 1,2,3,5 异常顺序 1,2,4,5 try块外异常不理会
异常发生处
块后加入finally块,可以确保无论是否发生异常, 在try/catch块后加入 块后加入 块 可以确保无论是否发生异常, finally块中的代码总能被执行 块中的代码总能被执行
自定义异常举例: 自定义异常举例
public class ServerTimedOutException extends Exception{ private String serverName; private int port; public ServerTimedOutException(String serverName, int port){ this.serverName=serverName; this.port = port; } public int getPort(){ return port; } public void setPort(int port){ this.port = port; } public String getServerName(){ return serverName; } public void setServerName(String serverName){ this.serverName = serverNam的try、catch中被 处理,它将被抛至方法的调用者处。 如果异常被返回到main方法里,并且仍然 没有被处理,程序将异常中止。
练习
编写一个类ExceptionTest1,在main方法 中使用try、catch、finally:
– –

在try块中,编写被0除的代码 在catch块中,捕获被0除所产生的异常,并且 打印异常信息 在finally块中,打印一条语句
正常与异常
正常与异常之比可达30% 比 70%

打开文件
文件不存在? 文件打不开?

读取文件
没有足够可读内容? 权限不允许读

写文件
磁盘满 网络断线

关闭文件
异常机制简介
在进行程序设计时,错误的产生是不可避免的, 如何处理错误?把错误交给谁去处理?程序又该 如何从错误中恢复?这是任何程序设计语言都要 解决的问题。 所谓错误,是在程序运行过程中发生的异常事件, 比如除0溢出、数组越界、文件找不到等,这些事 件的发生将阻碍程序的正常运行。为了增加程序 的强壮性,程序设计时,必须考虑到可能发生的 异常情况并做出相应的处理。
public class Test{ public static void main(String[] args){ Test t=new Test(); try { t.connectMe("sinojava", 80); } catch (ServerTimedOutException e){ System.out.println("连接服务器 连接服务器"+e.getServerName()+",端口为 端口为"+e.getPort()+"失败 失败"); 连接服务器 端口为 失败 }} public void connectMe(String serverName,int port) throws ServerTimedOutException{ if(serverName.equals("sinojava")&&port==80){ System.out.println("连接成功 连接成功!"); 连接成功 }else throw new ServerTimedOutException("sinojava", port); } }
Exception
类 Exception 定义了一些你的程序可能出 现的轻度错误条件 异常可能发生在:
你试图打开的文件并不存在 网络连接中断 操作数处理的超出预描述的范围 需要加载的文件丢失
Error 类定义了一些严重的错误条件
Java的异常处理是通过 个关键字来实现的:try、catch、 的异常处理是通过5个关键字来实现的 的异常处理是通过 个关键字来实现的: 、 、 finally、throw、throws 、 、
捕获异常
抛出异常 thro w
声明异常 throw s
try
执行可能产生 异常的代码
catch
捕获异常
手动抛出异常
声明方法可能要 抛出的各种异常
finally
无论是否发生异常, 无论是否发生异常, 代码总能执行
try,catch 语句的使用
try { //这里的代码可能抛出一个特别的异常 } catch (MyExceptionType e) { 如果MyExceptionType 的异常被抛出,将执行 这里的代码 } catch (Exception e) { 如果一个一般 Exception 被抛出时,将执行这 里的代码 }
RuntimeException
FileNotFoundException
须查异常与不须查异常
须查异常 – 多数的 Throwable、Exception 不须查异常 – Error、RuntimeException 当在一个方法的代码中抛出一个须查异常时,这个异常或者 被方法中的try-catch结构捕获,或者在方法的throws语句中 声明 编译器检查程序保证所有须查异常都被程序显示的处理
关于异常的设计
异常处理不是用来代替测试程序 不要压制异常 抛出异常不是一件坏事
try 块 有异常 无异常 catch 块
finally 块
举例
public class HelloWorld2 { public static void main (String args[]) { int i = 0; String greetings [] = { "Hello world!", "No, I mean it!", "HELLO WORLD!!" }; while (i < 4) { try { System.out.println (greetings[i]); } catch (ArrayIndexOutOfBoundsException e){ System.out.println("Re-stting Index Value"); } finally { System.out.println("This is always printed"); } i++; } }}
相关文档
最新文档