如何在不停止执行的情况下处理错误

时间:2019-01-09 10:13:45

标签: ibm-doors

我有一个小的dxl脚本,我需要从大小为20的数组中返回分配的位置数,例如,其中仅分配了10个位置。

我尝试使用noError()和lastError()函数,但是在调用lastError()之后,脚本被暂停并且无法继续执行。 这是我的代码:

int returnArrayLength(string array[]){
    int lengthOfArray = 0,i = 0;
    for (i=0; i < sizeof array ; i++){
            noError()
            if (!null array[i]){
                lengthOfArray++
                print lengthOfArray         
            }
            if (!null lastError()){
                print "Exception caught!" // not printed
                break
            }   
    }
    return lengthOfArray
}

string labels[6]
labels[0] = "label0"
labels[1] = "label1"
labels[2] = "label2"
labels[3] = "label3"

print returnArrayLength(labels)  // not printed

上面的代码显示以下内容: 1个 2 3 4

在调用lastError()函数后,如何恢复执行?

1 个答案:

答案 0 :(得分:1)

这比我想象的要难!

因此,事实证明,未分配的元素错误完全停止了DXL程序。那我们该怎么办?

好吧,我们需要在自己的环境中运行一段代码,并在需要时使其崩溃!

为此,我们需要创建一个eval_,将其传递给我们的数组,然后使其具有return_(如果eval_失败则不会执行)

看看:

int returnArrayLength(string array[]){
    int lengthOfArray = 0,i = 0;
    for (i=0; i < sizeof array ; i++){
        string scode = "noError()
            string ( &passedAr)[] = (addr_ "( ( addr_ array ) int ) ")
            string s = passedAr["i"]
            lastError()
            return_ \"Y\""
            if ( ( eval_ scode ) == "Y" ){
                lengthOfArray++
                print lengthOfArray         
            } else {
                print "Exception caught!" "\n"
                break
            }   
    }
    return lengthOfArray
}

string labels[6]
labels[0] = "label0"
labels[1] = "label1"
labels[2] = "label2"
labels[3] = "label3"

print returnArrayLength(labels)

多么奇妙的小问题。

我用来帮助解决此问题的资源:

How to pass an array into an eval_

eval_ , addr_ , and memory leaks

Testing for unassigned variables-由于数组的性质,这一方法不能完全起作用,至少据我所知!

无论如何,感谢您的挑战!