CN102385508A - 一种异常处理的方法、装置和软件*** - Google Patents
一种异常处理的方法、装置和软件*** Download PDFInfo
- Publication number
- CN102385508A CN102385508A CN2010102720278A CN201010272027A CN102385508A CN 102385508 A CN102385508 A CN 102385508A CN 2010102720278 A CN2010102720278 A CN 2010102720278A CN 201010272027 A CN201010272027 A CN 201010272027A CN 102385508 A CN102385508 A CN 102385508A
- Authority
- CN
- China
- Prior art keywords
- unusual
- abnormality processing
- exception
- processing interface
- mark
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
本发明属于计算机软件***领域,提供了一种异常处理的方法、装置和软件***。该方法包括下述步骤:对异常进行标注,标注出其对应的异常处理接口;***抛出异常后,统一捕捉进行过异常标注的异常;根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系;调用异常处理接口处理异常。本发明实施例统一集中处理异常的方法,大大减少了程序员工作量和出错的机会,精简了程序代码,提高了产品质量。也解决了程序员每出现一次异常都要单独写一次处理代码的问题,实现了对同类型异常的相同处理。且代码的复用性高,能够在不同环境对异常进行处理。
Description
技术领域
本发明属于计算机软件***领域,尤其涉及一种异常处理的方法、装置和软件***。
背景技术
异常是程序运行过程中出现的错误。传统的异常处理方式主要是程序员直接处理。这种方法含有多个异常处理语句,造成了代码的臃肿;异常处理分散在各个代码文件中间,针对同一类型异常,需要程序员在多个代码中书写或拷贝,极易出现不一致的处理;同一类型的错误有不同的表示,这导致处理的复杂化;一个项目中各层对异常处理的方式不同,不同的层编写不同的代码,会造成代码使用麻烦以及复用性低的问题,此时若需修改,可能改动较大。
发明内容
本发明实施例的目的在于提供一种简单、便捷的异常处理方法,旨在解决异常处理代码分散、繁琐,处理复杂,复用性低的问题。
本发明实施例是这样实现的,一种异常处理方法,其特征在于,所述方法包括以下步骤:
对异常进行标注,标注出处理此异常所需的异常处理接口;
***抛出异常后,统一捕捉进行过异常标注的异常;
根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系;
调用异常处理接口处理异常。
本发明实施例的另一目的在于提供一种简单、便捷的异常处理装置,所述装置包括:
异常标注单元,标注出处理各类异常所需的对应异常处理接口;
异常捕捉单元,捕捉异常标注单元标注了的异常信息;
异常配置单元,根据异常标注单元中标注的异常处理接口,保存异常和异常处理接口的对应关系再决定调用处理异常捕捉单元捕捉的异常所需的异常处理接口;
异常处理单元,调用异常配置单元所决定的异常处理接口处理异常。
在本发明实施例中,统一异常集中处理的方法,将多种类型异常的处理集中起来,解决了程序员每出现一次异常都要单独写一次处理方法的问题,实现了对同类型异常的相同处理,大大减少了程序员的工作量和出错的机会,精简了程序代码,提高了产品质量。且可用于项目中各层,使得代码的复用性高,能够在不同环境对异常进行处理,不必每次为不同的应用编写代码。
附图说明
图1是本发明第一实施例提供的异常处理方法实现流程图;
图2是本发明提供的类的示意图;
图3是本发明第二实施例提供的异常处理方法实现流程图;
图4是本发明第三实施例提供的异常处理方法实现流程图;
图5是本发明实施例提供的异常处理装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明实施例,首先进行异常标注,标注出处理此异常的异常处理接口。在***抛出异常后捕捉标注了的异常,然后读取异常堆栈中的类及其父类,查找其异常标注,根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系。最后,调用对应的异常处理接口处理异常。
本发明实施例提供了一种异常处理的方法、装置:
所述方法包括:对异常进行标注,标注出处理此异常所需的异常处理接口;
***抛出异常后,统一捕捉进行过异常标注的异常;
根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系;
调用异常处理接口处理异常。
所述装置包括:异常标注单元,标注出处理各类异常所需的对应异常处理接口;
异常捕捉单元,捕捉异常标注单元标注了的异常信息;
异常配置单元,根据异常标注单元中标注的异常处理接口,保存异常和异常处理接口的对应关系再决定调用处理异常捕捉单元捕捉的异常所需的异常处理接口;
异常处理单元,调用异常配置单元所决定的异常处理接口处理异常。
为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
实施例一:
图1示出了本发明第一实施例提供的异常处理的实现流程,详述如下:
在本发明实施例中,首先需要解释贯穿本发明实施例的异常处理接口类。其一为程序员根据自己需要解决的异常类型自定义的异常处理接口Handler。另一为本发明实施例中用于处理常见异常的默认异常处理接口DefaultHandler(如图2所示)。
在步骤S101中,对异常进行标注,标注出处理此异常所需的异常处理接口。
在本发明实施例中,异常标注是指通过异常标注类ExceptionHandler,用Java自带的标注函数标明处理异常的异常处理接口Handler或者默认异常处理接口DefaultHandler。
异常有类级别和方法级别两种。在进行异常标注的时候,既可以是对类进行异常标注,也可以是对方法进行标注。
具体标注方式如下:
若是类级别,则为:
ExceptionHandler
public class Test{}
若是方法级别,则为:
ExceptionHandler(handler=RestHandler.class)
public void methodA()throws RestException{}
由上可知,对异常类进行异常标注,则这个类中的所有方法均不必再单独进行异常标注,默认使用此类标注的异常处理接口进行处理。对异常方法进行异常标注,则需要对每个方法单独标注异常处理接口。
在步骤S102中,***抛出异常后,统一捕捉进行过异常标注的异常。
在本发明实施例中,统一捕捉的异常仅限于标注了的异常。用异常捕捉工具类HandlerUtil实现。。
其实现方法如下:
try{
//some code here
}catch(XxxException e){
HandlerUtil.handle(e,RestException.class);}
如上所示,try运行可能发生异常的代码后,使用异常捕捉工具类HandlerUtil来捕捉异常。
在步骤S103中,判断是否存在异常与异常处理接口的对应关系,是则直接执行步骤S105,否则先执行步骤S104,然后执行步骤S105;
在本发明实施例中,先读取异常堆栈中的类及其父类,查找其异常标注。然后通过查找到的异常标注得知处理此异常需要的异常处理接口后,将此异常与该异常处理接口的对应关系存储在列表中,此过程称为异常配置。
在本发明实施例中,由于在异常的类型相同的情况下,如果每次处理这类异常前都要配置一次则太过繁琐。因此,配置的时候会在某类异常第一次出现时进行配置,配置完成后记录下异常与异常处理接口的对应关系,这样下次再出现这类异常的时候就可直接通过读取异常与异常处理接口的对应关系找到对应的异常处理接口,不需要再重新配置一次了。这时,就要先判断异常是否已经进行过配置了,即是否存在异常与异常处理接口的对应关系。
在步骤S104中,根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系。
在本发明实施例中,以下步骤需要使用到3个类。如图2所示,类HandlerContextPopulato及类HandlerContext都为异常配置类。异常配置类HandlerContext用于存储和读取异常与异常处理接口的对应关系。异常配置类HandlerContextPopulator用于读取异常堆栈中的类及其父类,查找其异常标注。HandlerHelper为异常助手类,决定调用哪个异常处理接口Handler或默认异常处理接口DefaultHandler处理异常。
在本发明实施例中,对于没有配置过的异常,要先进行异常配置。使用类HandlerContextPopulator读取异常堆栈中的类及其父类,查找其异常标注。找到异常标注后,读取异常标注类ExceptionHandler。然后使用类HandlerContext根据异常标注的异常处理接口,将异常与异常处理接口的对应关系存储在列表中。
在步骤S105中,通过读取异常与异常处理接口的对应关系,决定调用哪个异常处理接口处理异常。
在本发明实施例中,对于已经配置过的异常,使用异常配置类HandlerContext读取异常与异常处理接口的对应关系。然后使用异常助手类HandlerHelper决定调用哪个异常处理接口处理异常。
在步骤S106中,调用对应的异常处理接口处理异常。
在本发明实施例中,调用上述所决定的异常处理接口Handler或者默认异常处理接口DefaultHandler处理异常。
本发明实施例中,这种统一处理异常的方式,精简了程序代码,提高了产品质量,同时解决了程序员每出现一次异常都要单独写一次处理代码的问题,实现了对同类型异常的相同处理。且代码的复用性高,能够在不同环境对异常进行处理。
实施例二:
图3示出了本发明第二实施例提供的异常处理的实现流程,详述如下:
在步骤S301中,对异常进行标注,标注出处理此异常所需的异常处理接口;
在步骤S302中,***抛出异常后,统一捕捉进行过异常标注的异常;
在步骤S303中,判断是否存在异常与异常处理接口的对应关系,是则直接执行步骤S305,否则先执行步骤S304,然后执行步骤S305;
在步骤S304中,根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系;
在步骤S305中,通过读取异常与异常处理接口的对应关系,决定调用哪个异常处理接口处理异常;
在步骤S306中,调用对应的异常处理接口处理异常,并记录异常日志。
在本发明实施例中,不论是使用异常处理接口Handler还是使用默认异常处理接口DefaultHandler处理异常,均可记录异常日志。根据所需,可设置异常日志记录诸如异常发生时间,原因,类型等信息。
在本发明实施例中,异常日志信息的统一记录使得开发人员对BUG异常定位准确,减少查找BUG产生原因的时间。并且此统一管理异常日志信息的方法,可以由负责人来进行错误信息的单独整理,改善用户体验。
实施例三:
图4示出了本发明第三实施例提供的异常处理的实现流程,详述如下:
在步骤S401中,对异常进行标注,标注出处理此异常所需的异常处理接口;
在步骤S402中,***抛出异常后,统一捕捉进行过异常标注的异常;
在步骤S403中,判断是否存在异常与异常处理接口的对应关系,是则直接执行步骤S305,否则先执行步骤S304,然后执行步骤S305;
在步骤S404中,根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系;
在步骤S405中,通过读取异常与异常处理接口的对应关系,决定调用哪个异常处理接口处理异常;
在步骤S406中,调用对应的异常处理接口处理异常;
在步骤S407中,根据***所需转换异常并抛出。
在本发明实施例中,根据***的需要,可能在处理完某些异常后需要将其转换为指定的异常。即使用异常转换工具Throwables(如图2所示)将异常转换为指定异常并继续抛出。
异常转换方法如下所示:
public Throwable handle(Throwable throwable,Object...params){
return new RuntimeException(throwable);}
由上可知,转换后返回一个新的指定异常。在转换异常时,需要把原异常传入构造参数,记录异常原因。
实施例四:
图5为本发明实施例提供的异常处理装置的结构示意,为了便于说明,仅示出了与本发明实施例相关的部分,该异常处理装置可以是内置于软件***中的软件单元、硬件单元或者软硬件相结合的单元,也可以作为独立的挂件集成到软件***中或者运行于软件***中,其中:该装置包括:异常标注单元1、异常捕捉单元2、异常配置单元3和异常处理单元4。
异常标注单元1,使用异常标注类ExceptionHandler标注出处理各类异常所需的对应异常处理接口。
异常捕捉单元2,使用异常捕捉工具类HandlerUtil捕捉异常标注单元标注了的异常信息。
异常配置单元3,使用异常配置类HandlerContextPopulator来读取异常堆栈中的类及其父类后,使用异常标注单元中的异常标注类ExceptionHandler查找其异常标注。再用异常配置类HandlerContext保存异常和异常处理接口的对应关系并用异常助手类HandlerHelper决定调用处理异常所需的异常处理接口。
异常处理单元4,调用异常配置单元所决定的异常处理接口Handler或默认异常处理接口DefaultHandler处理异常,并根据所需转换异常、记录异常日志。
在本发明实施例中,统一异常集中处理的方法,将多种类型异常的处理集中起来,解决了程序员每出现一次异常都要单独写一次处理方法的问题,实现了对同类型异常的相同处理,大大减少了程序员工作量和出错的机会,精简了程序代码,提高了产品质量。且可用于项目中各层,使得代码的复用性高,能够在不同环境对异常进行处理,不必每次为不同的应用编写代码。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (9)
1.一种异常的处理方法,其特征在于,所述方法包括以下步骤:
对异常进行标注,标注出处理此异常所需的异常处理接口;
***抛出异常后,统一捕捉进行过异常标注的异常;
根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系;
调用异常处理接口处理异常。
2.如权利要求1所述的方法,其特征在于,所述的异常标注是指用标注函数实现对异常类的标注或者对异常方法的标注。
3.如权利要求1所述的方法,其特征在于,所述方法进一步包括下述步骤:
调用对应的异常处理接口处理异常的同时记录异常日志。
4.如权利要求1所述的方法,其特征在于,所述方法进一步包括下述步骤:
处理完异常后根据***所需将异常转换为指定异常。
5.如权利要求1所述的方法,其特征在于,所述根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系的具体步骤为:
通过读取异常堆栈中的类及其父类来查找异常处理标注;
找到异常和异常处理接口的对应关系后,存储此对应关系;
根据此对应关系决定调用对应的异常处理接口。
6.如权利要求1至5任一项所述的方法,其特征在于,所述根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系进一步包括:
先判断是否存在异常与异常处理接口的对应关系;
若存在则直接根据此对应关系决定调用对应的异常处理接口;
若不存在此对应关系则根据异常标注找到对应的异常处理接口并存储异常和异常处理接口的对应关系。
7.一种异常处理装置,其特征在于,所述装置包括:
异常标注单元,标注出处理各类异常所需的对应异常处理接口;
异常捕捉单元,捕捉异常标注单元标注了的异常信息;
异常配置单元,根据异常标注单元中标注的异常处理接口,保存异常和异常处理接口的对应关系再根据此对应关系决定调用处理异常捕捉单元捕捉的异常所需的异常处理接口;
异常处理单元,调用异常配置单元所决定的异常处理接口处理异常。
8.如权利要求7所述的装置,其特征在于,所述的异常处理单元还能根据所需转换异常、记录异常日志。
9.一种软件***,其特征在于,所述***包括权利要求7或8任一权利要求所述的异常处理装置。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102720278A CN102385508A (zh) | 2010-09-03 | 2010-09-03 | 一种异常处理的方法、装置和软件*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2010102720278A CN102385508A (zh) | 2010-09-03 | 2010-09-03 | 一种异常处理的方法、装置和软件*** |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102385508A true CN102385508A (zh) | 2012-03-21 |
Family
ID=45824951
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2010102720278A Pending CN102385508A (zh) | 2010-09-03 | 2010-09-03 | 一种异常处理的方法、装置和软件*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102385508A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103377094A (zh) * | 2012-04-12 | 2013-10-30 | 金蝶软件(中国)有限公司 | 异常监测方法和装置 |
CN104216811A (zh) * | 2013-05-30 | 2014-12-17 | 腾讯科技(深圳)有限公司 | 应用程序的日志收集方法和*** |
CN104331367A (zh) * | 2014-11-12 | 2015-02-04 | 浪潮(北京)电子信息产业有限公司 | Java工程项目开发中异常处理的方法及*** |
CN105630479A (zh) * | 2014-11-28 | 2016-06-01 | 中兴通讯股份有限公司 | 程序运行过程中的异常处理方法及装置 |
CN106557415A (zh) * | 2015-09-28 | 2017-04-05 | 北京国双科技有限公司 | 程序运行异常的处理方法及装置 |
CN106610890A (zh) * | 2015-10-21 | 2017-05-03 | 北京国双科技有限公司 | 异常处理方法和装置 |
CN108121655A (zh) * | 2016-11-30 | 2018-06-05 | 北京国双科技有限公司 | 一种异常处理方法及装置 |
CN109240886A (zh) * | 2018-09-03 | 2019-01-18 | 平安科技(深圳)有限公司 | 异常处理方法、装置、计算机设备以及存储介质 |
CN111240882A (zh) * | 2020-01-16 | 2020-06-05 | 深圳开源互联网安全技术有限公司 | 检测异常状态的方法及*** |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030037227A1 (en) * | 2001-08-15 | 2003-02-20 | Fujitsu Limited | Processor enabling exception handling to be set by program |
US20040268370A1 (en) * | 2003-06-26 | 2004-12-30 | Microsoft Corporation | Exception handling |
CN101192192A (zh) * | 2006-11-21 | 2008-06-04 | 华为技术有限公司 | 用于实时操作***的任务异常诊断方法及*** |
CN101599039A (zh) * | 2008-06-03 | 2009-12-09 | 华为技术有限公司 | 嵌入式c语言环境下异常处理方法及装置 |
-
2010
- 2010-09-03 CN CN2010102720278A patent/CN102385508A/zh active Pending
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030037227A1 (en) * | 2001-08-15 | 2003-02-20 | Fujitsu Limited | Processor enabling exception handling to be set by program |
US20040268370A1 (en) * | 2003-06-26 | 2004-12-30 | Microsoft Corporation | Exception handling |
CN101192192A (zh) * | 2006-11-21 | 2008-06-04 | 华为技术有限公司 | 用于实时操作***的任务异常诊断方法及*** |
CN101599039A (zh) * | 2008-06-03 | 2009-12-09 | 华为技术有限公司 | 嵌入式c语言环境下异常处理方法及装置 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103377094B (zh) * | 2012-04-12 | 2016-08-03 | 金蝶软件(中国)有限公司 | 异常监测方法和装置 |
CN103377094A (zh) * | 2012-04-12 | 2013-10-30 | 金蝶软件(中国)有限公司 | 异常监测方法和装置 |
CN104216811B (zh) * | 2013-05-30 | 2018-07-20 | 腾讯科技(深圳)有限公司 | 应用程序的日志收集方法和*** |
CN104216811A (zh) * | 2013-05-30 | 2014-12-17 | 腾讯科技(深圳)有限公司 | 应用程序的日志收集方法和*** |
CN104331367A (zh) * | 2014-11-12 | 2015-02-04 | 浪潮(北京)电子信息产业有限公司 | Java工程项目开发中异常处理的方法及*** |
CN105630479A (zh) * | 2014-11-28 | 2016-06-01 | 中兴通讯股份有限公司 | 程序运行过程中的异常处理方法及装置 |
CN106557415A (zh) * | 2015-09-28 | 2017-04-05 | 北京国双科技有限公司 | 程序运行异常的处理方法及装置 |
CN106557415B (zh) * | 2015-09-28 | 2019-05-03 | 北京国双科技有限公司 | 程序运行异常的处理方法及装置 |
CN106610890A (zh) * | 2015-10-21 | 2017-05-03 | 北京国双科技有限公司 | 异常处理方法和装置 |
CN106610890B (zh) * | 2015-10-21 | 2019-08-20 | 北京国双科技有限公司 | 异常处理方法和装置 |
CN108121655A (zh) * | 2016-11-30 | 2018-06-05 | 北京国双科技有限公司 | 一种异常处理方法及装置 |
CN109240886A (zh) * | 2018-09-03 | 2019-01-18 | 平安科技(深圳)有限公司 | 异常处理方法、装置、计算机设备以及存储介质 |
CN109240886B (zh) * | 2018-09-03 | 2023-04-18 | 平安科技(深圳)有限公司 | 异常处理方法、装置、计算机设备以及存储介质 |
CN111240882A (zh) * | 2020-01-16 | 2020-06-05 | 深圳开源互联网安全技术有限公司 | 检测异常状态的方法及*** |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102385508A (zh) | 一种异常处理的方法、装置和软件*** | |
US9235497B2 (en) | Method and system for detecting concurrency programming errors in kernel modules and device drivers | |
US8078914B2 (en) | Open error-handling system | |
CN106155877B (zh) | 一种Android应用的模糊测试方法及*** | |
CN102542382A (zh) | 业务规则的管理方法和装置 | |
WO2021169623A1 (zh) | 一种业务处理方法、装置及电子设备和存储介质 | |
CN102567193A (zh) | 测试用例转化为自动化测试脚本的方法及*** | |
CN103577310A (zh) | 记录软件调试日志的方法以及装置 | |
JP2023070148A (ja) | ロボティックプロセスオートメーション(rpa)ロボットをリソースへ動的にバインドさせるためのシステムおよび方法 | |
WO2017066111A1 (en) | Telemetry system extension | |
CN105843899B (zh) | 一种可简化编程的大数据自动化解析方法及*** | |
CN101192192A (zh) | 用于实时操作***的任务异常诊断方法及*** | |
US20090006908A1 (en) | System and method for fault mapping of exceptions across programming models | |
JP2024505236A (ja) | データ処理システム用のデータセットマルチプレクサ | |
CN105247618B (zh) | 一种硬盘执行应用代码的方法及装置 | |
WO2016165461A1 (zh) | 一种电信网网管***软件自动化测试方法和装置 | |
CN102314514A (zh) | 一种表格数据结构化的作用域方法 | |
US8819494B2 (en) | Automatically changing parts in response to tests | |
US7664997B2 (en) | Failure handling and debugging with causalities | |
CN104536897A (zh) | 基于关键字的自动测试方法及*** | |
CN115952227A (zh) | 数据采集***及方法、电子设备和存储介质 | |
CN114547206A (zh) | 一种数据同步方法和数据同步*** | |
CN108563578A (zh) | Sdk兼容性检测方法、装置、设备及可读存储介质 | |
WO2019117854A1 (en) | Controller event queues | |
CN113342769A (zh) | 一种统一日志记录工具、方法、存储介质及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120321 |