有没有一种方便的方法可以在 Tcl 脚本中指定在发生任何错误时立即退出?有什么类似于set -e
bash 的吗?
编辑我正在使用将 Tcl 实现为脚本语言的软件。例如,如果我运行 package parseSomeFile fname
,如果文件fname
不存在,它会报告它,但脚本继续执行。有没有办法让我在那里停止脚本?
有没有一种方便的方法可以在 Tcl 脚本中指定在发生任何错误时立即退出?有什么类似于set -e
bash 的吗?
编辑我正在使用将 Tcl 实现为脚本语言的软件。例如,如果我运行 package parseSomeFile fname
,如果文件fname
不存在,它会报告它,但脚本继续执行。有没有办法让我在那里停止脚本?
通常不需要;一个命令通过抛出一个错误而失败,如果没有被捕获,该错误会使脚本退出并显示一条信息性消息(嗯,取决于主机程序:这是tclsh
的行为)。不过,如果您确实需要立即退出,您可以通过在收集错误跟踪的全局变量上放置跟踪来加快进度:
trace add variable ::errorInfo write {puts stderr $::errorInfo;exit 1;list}
(list
最后的只是捕获跟踪参数,以便它们被忽略。)
不建议这样做。现有的 Tcl 代码,包括您可能正在使用的所有包,都假定它可以catch
出错并采取一些措施来处理它们。
在 Tcl 中,如果您遇到错误,脚本将立即退出,除非您抓住它。这意味着您不需要指定set -e
.
理想情况下,parseSomeFile
应该返回错误,但看起来没有。如果您可以控制它,请修复它以返回错误:
proc parseSomeFile {filename} {
if {![file exists $filename]} {
return -code error "ERROR: $filename does not exists"
}
# Do the parsing
return 1
}
# Demo 1: parse existing file
parseSomeFile foo
# Demo 2: parse non-existing file
parseSomeFile bar
第二个选项是在调用之前检查文件是否存在parseSomeFile
。