是否可以在tcl脚本中指定用户定义的错误命令? 如果有任何错误,我想清理内存。我知道最后一个错误保存在errorInfo变量中。
答案 0 :(得分:4)
目前还不是很清楚你真正想做什么。
您可以使用catch
命令捕获任何错误。如果您需要它在顶层工作,您可以在catch
下评估脚本的其余部分,例如
catch {
source ./the_rest_of_the_code.tcl
} err
对于异步程序(那些使用事件循环,包含Tk的程序),并不是那么容易,因为在回调中可能会引发意外错误。要处理那些查看bgerror
命令。
答案 1 :(得分:3)
另一种方法是在leavestep模式下使用执行跟踪,它允许您测试每个命令执行是否失败,并确定发生时该怎么办。 (这与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
虽然这很慢。
答案 2 :(得分:1)
您还可以定义bgerror程序并将代码作为后台任务调用:
proc bgerror { msg } {
puts "bgerror:$msg"
# Cleanup code here
}
proc troubleCode { } {
adjsad s ahda
}
after 1 troubleCode