如何更改Tcl错误前缀?

时间:2012-01-21 10:05:08

标签: exception-handling error-handling tcl

Tcl error命令将指定的消息写入stderr,并在其中添加前缀“Error:”。

是否可以使用“ERROR:”或“MyError:”等其他内容更改该前缀?

1 个答案:

答案 0 :(得分:3)

error命令本身不会向Tcl结果以外的任何地方写入任何内容。 实际所做的是抛出异常(类型为“error”; C API级别为TCL_ERROR)。以“Error: ”为前缀的代码只是标准的回退处理程序,但您可以使用自己的主脚本使用catch来捕获任何结果并决定如何处理它(或者从8.6开始,try …,在捕获特定问题时更容易使用。)

if {[catch {source realscript.tcl} msg]} {
    # Caught an error!
    puts stderr "Oh noes! Teh errorz iz atakkin! $msg"
    puts stderr $::errorInfo
    exit 1
}

好的,如果你使用的是8.5,那么写一个更好的方法就是:

if {[catch {source realscript.tcl} msg resultdict]} {
    # Caught an error!
    puts stderr "Oh noes! Teh errorz iz atakkin! $msg"
    puts stderr [dict get $resultdict -errorinfo]
    exit 1
}

结果词典中有很多其他有趣的东西,你可能会或可能不会对它感兴趣。有一个可以解决的问题。