返回码错误和错误之间的区别是什么

时间:2012-05-30 15:33:27

标签: tcl

通过return -code error ...error ...在TCL中引发异常的实际区别是什么?何时使用一个而不是另一个?

1 个答案:

答案 0 :(得分:6)

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"
相关问题