版权归原作者所有,如有侵权,请联系我们

[科普中国]-错误处理程序

科学百科
原创
科学百科为用户提供权威科普内容,打造知识科普阵地
收藏

简介

在程序设计中,错误,是指不希望的程序运行状态。 它不是程序在编译过程中的错误,而是程序在运行中可能出现的错误,是程序运行中的不稳定状态。这种不稳定状态是由异常条件产生,所以在有些编程语言中就叫异常。错误处理程序是指软件系统中用于处理错误的程序,在程序设计或软件系统设计中,错误处理程序是不可或缺的一部分,因为错误处理程序可以帮助软件设计人员很快找到错误原因及解决方案。

错误处理程序的步骤常见的错误类型有:语法错误、运行错误、逻辑上错误。错误处理程序的设定一般分为三个步骤:

错误捕获的设置。On Error语句,该语句可以启动一个错误处理程序而且指定该子程序在一个过程中的位置;也可用来禁止一个错误处理程序。当Visual Basic执行到语句 On Error时激活错误捕获,用On Error指定错误处理程序。

错误处理例程的编写。编写错误处理例程首先要添加行标签,把这个标签标志着错误处理例程的开始。行标签是一个具有描述性的名称,它的后边必须加冒号。有一个公共的约定就是把错误处理代码书写在过程的尾部。在紧靠行标签的前方要书写Exit Sub,Exit函数或Exit属性语句。若没有出现错误,就可以避免错误处理代码的执行。

退出错误处理例程的编写。指定错误处理程序后决定程序要到哪里去执行,FileExists()函数示例使用错误处理程序内的Resume语句,重新执行之前导致错误的那条语句,相当于Ignore。

语法错误语法错误是指程序的语法有误,编译器或解译器在词法分析时无法将其转换为适当的编程语言。在编译语言中,语法错误一定只在编译期时出现,编译器要所有的语法都正确,才能正确编译。不过直译语言中的语法错误可能要到运行期才会出现,而且不一定容易区分语法错误及语义错误。早期8位家用电脑的用户界面是BASIC解释器,SYNTAX ERROR错误消息常造成用户的困扰,只要解释器无法识别用户的输入,就会出现此一消息。若计算器中输出不正确的算式,也会出现语法错误,例如算式中有左括号但没有右括号、或是一个数字中有多个小数点等。

在Java语言中,以下的程序是正确的:

System.out.println("Hello World");

以下的程序不正确:

System.out.println(Hello World);

第二个程序理论上要显示的是叫作Hello World的变量,而不是Hello World这个字,且Java语言的变量名称中不可有空白,因此会出现语法错误。编译器会标示程序中有语法错误的行,可能也会有简单的说明。

异常处理异常指的是在程序运行过程中发生的异常事件,通常是由硬件问题或者程序设计问题所导致的。

异常处理,是编程语言或计算机硬件里的一种机制,用于处理软件或信息系统中出现的异常状况(即超出程序正常执行流程的某些特殊条件)。

各种编程语言在处理异常方面具有非常显著的不同点(错误检测与异常处理区别在于:错误检测是在正常的程序流中,处理不可预见问题的代码,例如一个调用操作未能成功结束)。某些编程语言有这样的函数:当输入存在非法数据时不能被安全地调用,或者返回值不能与异常进行有效的区别。例如,C语言中的atoi函数(ASCII串到整数的转换)在输入非法时可以返回0。在这种情况下编程者需要另外进行错误检测(可能通过某些辅助全局变量如C的errno),或进行输入检验(如通过正则表达式),或者共同使用这两种方法。

通过异常处理,我们可以对用户在程序中的非法输入进行控制和提示,以防程序崩溃。

从进程的视角,硬件中断相当于可恢复异常,虽然中断一般与程序流本身无关。

从子程序编程者的视角,异常是很有用的一种机制,用于通知外界该子程序不能正常执行。如输入的数据无效(例如除数是0),或所需资源不可用(例如文件丢失)。如果系统没有异常机制,则编程者需要用返回值来标示发生了哪些错误。

错误处理规则开发程序时应该遵循下列错误处理规则:①程序开始就应该选定一种错误处理模型,并一致地用选定的模型来处理错误。 ②对于返回值模型和全局错误标志模型 ,出错语句后紧跟错误处理块,以便改善此类模型的结构问题。 ③对于恢复性模型,保证 On Error Goto lineno 语句所指代码块位于其后,最好是将方法中的所有错误处理块放在方法的尾部。不使用或少使用 On Error Resume Next 语句。④对于恢复性和限制性模型,强调对所有可能出现错误的语句块进行错误处理,但是,由于这两种模型所抛出的错误 (异常 )对象可以向上传递,因此并不要求在每个方法内进行错误处理。 一般情况下,应该对一个事件中的代码,两个人机交互之间的代码进行错误捕捉。 在编制 COM组件时,向外输出的方法中也应该进行错误捕捉 ,并抛出错误 (异常 )对象1。