return -code error ...
在 TCL 中通过和引发异常实际上有什么区别error ...
?什么时候用一个代替另一个?
问问题
1080 次
1 回答
7
该error
命令在当前点产生错误;这对于由于过程的内部状态而引发问题的情况非常有用。该return -code error
命令使它所在的过程产生错误(就好像该过程是error
);这对于传递给过程的参数有问题(即调用者做错了什么)的情况非常有用。当您查看堆栈跟踪时,差异确实出现了。
这是一个(人为的!)示例:
proc getNumberFromFile {filename} {
if {![file readable $filename]} {
return -code error "could not read $filename"
}
set f [open $filename]
set content [read $f]
close $f
if {![regexp -- {-?\d+} $content number]} {
error "no number present in $filename"
}
return $number
}
catch {getNumberFromFile no.such.file}
puts $::errorInfo
#could not read no.such.file
# while executing
#"getNumberFromFile no.such.file"
catch {getNumberFromFile /dev/null}
puts $::errorInfo
#no number present in /dev/null
# while executing
#"error "no number present in $filename""
# (procedure "getNumberFromFile" line 9)
# invoked from within
#"getNumberFromFile /dev/null"
于 2012-05-31T10:24:03.620 回答