exception - 如何更改Tcl错误前缀?

标签 exception error-handling tcl

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

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

最佳答案

error 命令本身不会将任何内容写入 Tcl 结果以外的任何位置。它实际上所做的是抛出异常(类型为“错误”;C API 级别的 TCL_ERROR)。以“Error: ”为前缀的代码只是标准后备处理程序,但您可以通过让主脚本使用 catch 来使用自己的代码。捕获任何结果并决定如何处理它(或从 8.6 开始尝试...,这在捕获特定问题时更容易使用)。

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
}

结果字典中还有很多其他有趣的内容,您可能感兴趣也可能不感兴趣。看看吧。

关于exception - 如何更改Tcl错误前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8952147/

相关文章:

javascript - Photoswipe 无法读取 photoswipe.js 第 1070 行未定义的属性 'center'

swift - 在 Swift 中使用 NSTimer 时发送到类的无法识别的选择器; NSInvalidArgumentException

python - 处理 Tweepy api 返回的 420 响应码

linux - 使用模块设置 coredumpsize 的限制

cygwin - TCL/TCLSH 没有该文件或目录

java.lang.IndexOutOfBoundsException : Index 7, 大小:7

python - 如何捕获 Django 中的 MultipleObjectsReturned 错误

vba - 当单元格为空白并且有许多例程时,如何处理错误

r - 错误于{: task 1 failed - "error returned from C call" using ncvar_get (ncdf4 package) within foreach loop

python - 创建独立于 python 版本的 python c 模块?