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

在tcl脚本中的任何tcl错误上添加回调命令?,tcl,tk,Tcl,Tk,是否可以在tcl脚本中指定用户定义的错误命令? 如果出现任何错误,我想清除上的内存。我知道最后一个错误保存在errorInfo变量中。不太清楚您到底想要什么 您可以使用该命令捕获任何错误。如果需要它在顶层工作,可以在catch下评估脚本的其余部分,如中所示 catch { source ./the_rest_of_the_code.tcl } err 对于异步程序(那些使用事件循环的程序,包括Tk)来说,这并不容易,因为在回调中可能会出现意外错误。要处理这些问题,请查看命令。不太清楚您到底

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

不太清楚您到底想要什么

您可以使用该命令捕获任何错误。如果需要它在顶层工作,可以在
catch
下评估脚本的其余部分,如中所示

catch {
  source ./the_rest_of_the_code.tcl
} err

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

不太清楚您到底想要什么

您可以使用该命令捕获任何错误。如果需要它在顶层工作,可以在
catch
下评估脚本的其余部分,如中所示

catch {
  source ./the_rest_of_the_code.tcl
} err

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

另一种替代方法是在leavestep模式下使用执行跟踪,它可以让您测试执行的每个命令是否失败,并确定如果发生了该怎么办。(这与在AOP中处理某些类型的方面非常相似。)

proc doIt{}{
名称空间求值::{
#你真正的密码在这里
}
}
跟踪添加执行doIt leavestep{::apply{{{cmd cmdArgs code result op}{
如果{$code==1}{#0==ok,则1==error

puts“ERROR>>$result另一种选择是在LEVESTEP模式下使用执行跟踪,该模式允许您测试执行的每个命令是否失败,并确定如果失败了该怎么办。(这与在AOP中处理某些类型的方面非常相似。)

proc doIt{}{
名称空间求值::{
#你真正的密码在这里
}
}
跟踪添加执行doIt leavestep{::apply{{{cmd cmdArgs code result op}{
如果{$code==1}{#0==ok,则1==error

放置“ERROR>>$result您还可以定义bgerror过程并将代码作为后台任务调用:

proc bgerror { msg } {
  puts "bgerror:$msg"
  # Cleanup code here
}

proc troubleCode { } { 
  adjsad s ahda 
}

after 1 troubleCode

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

proc bgerror { msg } {
  puts "bgerror:$msg"
  # Cleanup code here
}

proc troubleCode { } { 
  adjsad s ahda 
}

after 1 troubleCode

由于我们无法将捕获添加到完整代码中,“bgerror”是一种方法。我只需要tcl中一些复杂的错误系统。感谢您提供有关bgerror的想法。由于我们无法将捕获添加到完整代码中,“bgerror”是一种方法。我只需要tcl中一些复杂的错误系统。感谢您提供有关bgerror的想法。