Exception 如何进一步提高或忘记异常

Exception 如何进一步提高或忘记异常,exception,eiffel,design-by-contract,Exception,Eiffel,Design By Contract,我如何在埃菲尔铁塔筹款?我有三箱 我想重试 a_feature local l_retries_count: INTEGER do some_potential_failing_feature rescue if l_retries_count <= 3 then l_retries_count := l_retries_count + 1 retry e

我如何在埃菲尔铁塔筹款?我有三箱

  • 我想重试

    a_feature
        local
            l_retries_count: INTEGER
        do
            some_potential_failing_feature
        rescue
            if l_retries_count <= 3 then
                l_retries_count := l_retries_count + 1
                retry
            end
        end
    
  • 我想关闭数据库连接并向管理员发送电子邮件,然后忽略

    a_feature
        do
            some_potential_failing_feature
        rescue
            db_connection.close
            send_email_to_admin
        end
    
  • 我想关闭db_连接并进一步引发异常,我将把我能想到的所有情况都放到上面的代码中

    a_feature
        local
            l_retries_count: INTEGER
        do
            some_potential_failing_feature
        rescue
            if l_retries_count <= 3 then
                l_retries_count := l_retries_count + 1
                log_error ("Error, retrying for " + l_retries_count.out + "th time")
                retry
            else
                db_connection.close
                send_email_to_admin
                -- raise the_created_exception_from_some_potential_failing_feature -- how do I do that?
            end
        end
    
    a_功能
    地方的
    重试次数:整数
    做
    一些潜在的功能
    营救
    
    如果l_重试\u count,您可以尝试以下操作之一:

    {EXCEPTION_MANAGER}.last_exception.original.raise
    {EXCEPTION_MANAGER}.last_exception.cause.raise
    {EXCEPTION_MANAGER}.last_exception.raise
    
    第一个异常贯穿异常链,忽略因例程失败而触发的异常。它可能就是你要找的那个


    接下来的两个函数将检索当前异常的原因或当前异常本身,但它可能不是您要查找的异常,因为它取决于异常的上下文和嵌套调用。

    您可以尝试以下操作之一:

    {EXCEPTION_MANAGER}.last_exception.original.raise
    {EXCEPTION_MANAGER}.last_exception.cause.raise
    {EXCEPTION_MANAGER}.last_exception.raise
    
    第一个异常贯穿异常链,忽略因例程失败而触发的异常。它可能就是你要找的那个

    接下来的两个函数检索当前异常的原因或当前异常本身,尽管它可能不是您要查找的异常,因为它取决于异常的上下文和嵌套调用