如何在不停止执行的情况下处理错误
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 - 由于数组的性质,这个不太有效,至少据我所知!
无论如何,感谢您的挑战!
我有一个小的 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 - 由于数组的性质,这个不太有效,至少据我所知!
无论如何,感谢您的挑战!