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

How to handle errors without execution halting

我有一个小的 dxl 脚本,我需要 return 从数组中分配的位置数,比方说,大小为 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() 函数调用后如何恢复执行?

这比我想象的要难!

因此,事实证明,一个未分配的元素错误完全停止了 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 - 由于数组的性质,这个不太有效,至少据我所知!

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