Exception 埃菲尔铁塔和救援条款中的错误处理

Exception 埃菲尔铁塔和救援条款中的错误处理,exception,error-handling,eiffel,Exception,Error Handling,Eiffel,在程序结尾处编写一个rescue子句以结束Eiffel中的程序是否足以处理程序中编写的任何例程中的异常,如前置、后置条件或不变冲突?或者我应该为每个具有前置和后置条件的函数编写rescue子句来处理异常 我已经读过了,但是我想不出来。答案取决于你的期望。方法如下: 先决条件冲突会报告给调用方。它们表示调用者中存在错误。如果调用者中预期或可能存在bug,您可以在调用者中捕获并处理它们 向被叫方报告后条件违规。它们表示被调用方中的错误。如果预期会出现此类错误,被调用方可以捕获并处理它们 类不变量在对

在程序结尾处编写一个rescue子句以结束Eiffel中的程序是否足以处理程序中编写的任何例程中的异常,如前置、后置条件或不变冲突?或者我应该为每个具有前置和后置条件的函数编写rescue子句来处理异常


我已经读过了,但是我想不出来。答案取决于你的期望。方法如下:

  • 先决条件冲突会报告给调用方。它们表示调用者中存在错误。如果调用者中预期或可能存在bug,您可以在调用者中捕获并处理它们

  • 向被叫方报告后条件违规。它们表示被调用方中的错误。如果预期会出现此类错误,被调用方可以捕获并处理它们

  • 类不变量在对象创建时建立。如果创建过程或在执行限定调用中使用的过程后违反了这些错误,则它们表示被调用方中存在错误,可以像处理后条件违反一样进行处理。否则,它们表示涉及对象依赖关系的更复杂问题。它可以由调用方处理,但很可能几乎不可能恢复正确的对象状态


  • 在所有情况下,断言冲突都意味着程序错误,是否以及如何捕获和处理它取决于您的需要。例如,可以在有问题的代码和根过程之间的某个地方进行处理。

    我的问题实际上意味着,如果一个先决条件失败,程序将完全失败,从而导致先决条件冲突,因此它必须转到rescue语句?(我关于程序流的假设正确吗?)我们只是输出无效语句或再次重试,因此我再次认为只编写一条rescue语句比在所有例程中都编写它更有意义。@Akashtadwi是一位库作者,他认为“代码还没有经过很好的测试,我最好放一个rescue子句来捕获任何问题,并使用库API报告失败,而不是让整个应用程序崩溃“。另一个图书馆的作者也会有同样的想法。使用这两个库的应用程序的作者可以考虑捕获异常,让用户做其他事情(例如,在终止应用程序之前保存他的工作)。这将在多个地方形成多个救援条款。所以,这实际上取决于开发过程。还有一个问题,有没有办法通过命令行检查所有合同来运行.e文件(埃菲尔项目)?ec.e只是忽略了所有写在文件中的前置、后置条件和不变量,假设我们想要终止,因为输入无效,我通过rescue写了一些东西,它会被执行吗?有没有办法通过命令行检查所有条件来运行Eiffel文件,或者我们必须使用Eiffel studio?Akashtadwi EiffelStudio提供了一种方便而健壮的方式来编辑项目设置。记录设置的文件的名称随时间而更改,因此建议使用“项目设置”对话框设置断言监视级别。不过,您可以自己编辑关联的
    .ecf
    文件。在撰写本文时,您可以确保在相应的元素
    目标
    中有一个元素
    选项
    ,带有