是否可以在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