tk-toolkit-在tcl脚本中的任何tcl错误上添加回调命令



是否可以在tcl脚本中指定用户定义的错误命令?如果出现任何错误,我想清理上的内存。我知道最后一个错误保存在errorInfo变量中。

您到底想要什么还不太清楚。

您可以使用catch命令捕获任何错误。如果您需要它在顶级上工作,您可以在catch下评估脚本的其余部分,就像在中一样

catch {
  source ./the_rest_of_the_code.tcl
} err

对于异步程序(那些使用事件循环的程序,包括Tk)来说,这并不容易,因为回调中可能会引发意外错误。要处理这些问题,请查看bgerror命令。

另一种选择是在leavestop模式下使用执行跟踪,它可以让您测试执行的每个命令是否失败,并确定如果失败该怎么办。(这很像您可以在AOP中对某些类型的方面执行的操作。)

proc doIt {} {
    namespace eval :: {
        # Your real code goes in here
    }
}
trace add execution doIt leavestep {::apply {{cmd cmdArgs code result op} {
    if {$code == 1} {#0 == ok, 1 == error
        puts "ERROR >>$result<< from $cmdArgs"
    }
}}}
doIt

不过速度很慢。

您还可以定义bgerror过程,并将代码调用为后台任务:

proc bgerror { msg } {
  puts "bgerror:$msg"
  # Cleanup code here
}
proc troubleCode { } { 
  adjsad s ahda 
}
after 1 troubleCode

相关内容

  • 没有找到相关文章

最新更新