在一些程序设计语言,例如Java语言,一个例外是一种类型消息这意味着刚刚发生了一些可能不好的事情。

例外情况是“抛出的“,他们是”抓住了“。在Java中,编写可能会造成不良后果的代码的常用编程习惯用法是尝试{…}catch(Exception e){…{,如下所示:

   /*这是给一些人的嵌入式系统控制乒乓球球机。应该放在无限循环或者别的什么。*/

   尝试{耐心等待几秒钟();喷出乒乓球恒定流(100000);}抓住(乒乓球出局例外ppbe){//处理非致命异常。robot.fillBallContainer();}抓住(投球手卡住了){//处理致命异常。sendAlert(“球机又坏了。”+“请派人修理……”);停止并等待重新启动();}抓住(例外情况e){//捕获此处未涵盖的所有其他异常sendAlert(“其他异常:”+e+“需要帮助?”);停止并等待重新启动();}最后{//好吧,在这一切之后,我们可以做点什么。
       //我想不出什么明智的办法。
       //(这用于设置done=true或其他愚蠢的东西
       //这样。=)}

当子程序抛出异常时,它会在“命令链”中传递,直到某个捕捉器对其负责。如果未捕捉到异常,则由操作系统或(如果虚拟机)口译员。

并非所有例外都是致命的,如上例所示;这就是为什么可以捕获异常并对其作出相应反应的原因。

另请参见:错误.

例外情况是替换转到声明。它还为您提供了一个补充来自声明,goto严重缺乏的东西。

哦,顺便说一句:

尝试{。。}抓住(….e){done=真;} ... {。。。}最后{done=假}

由于finally块一直运行,“done=true”语句将没有任何效果,因为finally语句将其设置回false。

英语单词“Exception”

不寻常的,非凡的发生。低概率发生。例如
对,人们偶尔会在没有降落伞的情况下从飞机上摔下来,但那是例外情况而不是规则.

通常不做的事情,违反规则,通常对某人有利。例如
你说的再说一遍更喜欢英俊的男人,但对我来说你会破例.

另请参见例外除非明确表示异常糟糕,具有以下含义好的,高于平均的例如。
强化学校是一所优秀学生的学习场所。非常好
这是一个美好而特殊的日子。非常好
我看到过许多腐朽的废墟,而这一片却异常腐朽。异常衰败。

“对……破例”是一种正式的维多利亚时代英语短语,表示你感到被侮辱,言语超出了可接受的范围。“先生,我不同意你对我母亲性行为的评论。我要求你决斗。”

“异常”作为编程术语

是的,这是我写作的主要目的
例外情况是程序性的 程序设计 语言设计用于处理异常或错误条件。中的例外程序设计判断力通常很差。例如这个程序抛出异常并崩溃预计起飞时间。

异常可以视为转到伪装。虽然这是真的,但确实如此值得记住的是控制流程声明,如果 然后 其他的阻碍,for循环第页,while循环第页,案例等都是伪装的。所有这些都是对使用raw的改进非结构化goto,其中包括被认为有害用于一般用途,如果您有结构化的替换它们。异常没有什么不同,非常值得使用,而不是尝试检查您调用的每个函数的返回值。埃克尔解释:

如果你仔细检查错误每次你打电话给方法,您的代码会变成一场无法阅读的噩梦。

“例外”一词的意思是“我对此表示反对”。当问题发生时,你可能不知道该怎么办,但你知道你不能只是愉快地继续下去,你必须停下来,在某个地方,有人必须想办法做什么。

..他们会清理错误处理代码。您不再需要在方法调用时进行检查,而不是检查特定错误并在程序中的多个位置进行处理。。。你只需要在一个地方处理问题异常处理程序
-来自Java编程思想,第10章“异常错误处理”埃克尔.

例外情况是抛出的发生错误时。正常程序流为中断,控制传递给最近的封闭异常处理程序,然后恢复正常的控制流。由于代码显式执行此操作或由于打断从操作系统。如果这听起来很奇怪,也很难理解,那么先看看例子。

自从Exceptions在面向对象编程,在大多数语言中,例外是对象,可以查询其类型和属性。

我将用我使用的编程语言做一些示例,德尔福.德尔福异常模型与蟒蛇C类#.Java语言使用基本相似的模型,但有以下细微差异:

  • Java的catch关键字使用不同的语法,而不是except来捕获和处理异常。
  • 所有java方法都必须声明可能引发的异常。调用方法时,调用方方法必须捕获被调用方抛出的所有异常,否则必须在自己的抛出列表中声明这些异常。这是由编译器强制执行的。
您的里程数可能因其他语言而异。无论如何,以下是Delphi代码示例:

//函数崩溃,但程序将恢复
功能算术异常:双精度;
无功功率,无功功率
MyZero:双倍;
开始
MyZero:=0;
结果:=10/MyZero;//砰!-将引发异常!!!
ShowMessage(“您不会看到此内容”);
结束

程序TryIt;
开始
 尝试
算术异常;
 除了
显示消息(“Bang”);
 结束
结束

调用TryIt时会发生什么?被零除,一个例外是抛出的.正常的执行流停止堆栈直到最近的找到封闭的try-except块。在这种情况下,它就在不远处。结果调用TryIt只是消息“Bang”。

Finally块

另一种异常处理形式,try。。最后块用于无论发生什么情况,都要确保运行一段代码,即使出现异常抛出。这通常用于确保释放分配的资源。 例如,如果您的代码为:

功能ThisMayFail:双倍;
无功功率,无功功率
lcSomeObj:TBigExpensiveObject;
开始
lcSomeObj:=TBigExpensiveObject。创建;

lcSomeObj.SomeRiskyOperation;
lcSomeObj.SomeRisky操作;

结果:=lcSomeObj.GetResultValueFromTheNetherDepths;

lcSomeObj.Free;
结束

如果在某些风险操作期间抛出异常,对象将永远不会释放,内存就会泄漏。以下代码更好:

功能ThisMayFail:双倍;
无功功率,无功功率
lcSomeObj:TBigExpensiveObject;
开始
lcSomeObj:=TBigExpensiveObject。创建;
 尝试

lcSomeObj.SomeRisky操作;
lcSomeObj.SomeRisky操作;

结果:=lcSomeObj.GetResultValueFromTheNetherDepths;
 最后
lcSomeObj.Free;
 结束
结束

现在可以保证在正常执行中,或者即使异常是抛出,事实上总是(除非灾难例如电源故障、操作系统崩溃或用户强制终止整个程序,在这种情况下,内存泄漏无关紧要)对象将被释放。这将在正常的语句序列中发生,或者在抛出异常时发生。

高级尝试。。除:

有几种常见的尝试变化。。块除外:


如果您认为有必要,可以手动提出例外。

如果pObject=零然后
  升起TMy异常。创建('someproc'中的零指针');

这也证明了你可以自己做子类异常,并按照下面的示例进行测试。


你可以压制例外。


程序TryIt;
开始
 尝试
算术异常;
 除了
//出现错误时,不采取任何措施
 结束
结束

这种风格是我最讨厌的。Try-except块不能替代良好的代码或调试。这不是没有错误的代码,这是错误代码。应报告错误,以便修复错误,例如。

程序TryIt;
开始
 尝试
算术异常;
 除了
上的
E: 例外
   
ShowMessage(“Failed ArithmeticException with error”+E.ClassName+“:”+E.Message);
结束;
结束

这会产生一条很好的错误消息“失败的ArithmeticException,出现错误EZeroDivide(EZeroDivide):浮点 被零除“。如果对话框不适合您的程序(可能是一个无人值守的服务器任务,必须继续运行),则记录错误并继续。只是不要忽略它。

这也说明了异常是对象。


您可以根据异常对象的类型(全部异常类型为Exception或其子类之一)。这也很好练习-你不想告诉用户他们输入的文本当实际错误是操作系统已运行时,无法转换为字符串内存不足:

程序TryIt;
开始
 尝试
算术异常;
 除了
上的
E: EMath错误
    
ShowMessage(“失败,出现数学错误”+E.ClassName+“:”+E.Message)
其他
升高;
结束;
结束

在这种情况下,EMathError是EZeroDivide的基类以及所有其他可能出错的数字。所有其他错误将是传递到下一次封闭尝试。。块除外。如果没有找到,则将调用包含整个程序的默认处理程序,并向您显示讨厌的对话框。

防爆(?),n.[L。例外:参见F。例外.]

1

排除排除的行为;排除;通过去掉本来应该包含在类、语句、规则中的内容进行限制。

2

被排除在外或从他人身上取下的;明确或不包括的人、事或案件;因为,几乎所有的一般规则都有它的例外.

如此罕见例外在黑暗中闪闪发光,证明,而不是弹劾,公正的言论。考珀。

通常与.

那份骄傲例外遵守所有自然法则。教皇。

三。 法学

在诉讼过程中对保释或担保提出的口头或书面异议;或法官在审判过程中或向陪审团负责时的决定;或关于时间流逝、丑闻、无礼或辩护不足;此外,如在转易中,授予人在授予前排除某些内容的条款。

伯里尔。

4

反对;鱼子酱;异议;否决;犯罪;犯罪原因;——通常后跟反对.

我永远不会回答什么例外他们可以从我们的账户[关系]中扣除。宾利。

他。例外到他们埋葬的地方。培根。

她接受了例外对你本人。沙克。

例外情况清单 法学是法官在诉讼审判中对决定或指示的例外情况的陈述,目的是将决定的要点记录在案,以便提交上级法院或全体法官审查。

 

©韦伯斯特1913.

登录登记在这里写点什么或联系作者。