0

有没有一种方便的方法可以在 Tcl 脚本中指定在发生任何错误时立即退出?有什么类似于set -ebash 的吗?

编辑我正在使用将 Tcl 实现为脚本语言的软件。例如,如果我运行 package parseSomeFile fname,如果文件fname不存在,它会报告它,但脚本继续执行。有没有办法让我在那里停止脚本?

4

2 回答 2

1

通常不需要;一个命令通过抛出一个错误而失败,如果没有被捕获,该错误会使脚本退出并显示一条信息性消息(嗯,取决于主机程序:这是tclsh的行为)。不过,如果您确实需要立即退出,您可以通过在收集错误跟踪的全局变量上放置跟踪来加快进度:

trace add variable ::errorInfo write {puts stderr $::errorInfo;exit 1;list}

list最后的只是捕获跟踪参数,以便它们被忽略。)

建议这样做。现有的 Tcl 代码,包括您可能正在使用的所有包,都假定它可以catch出错并采取一些措施来处理它们。

于 2013-05-25T08:00:43.977 回答
0

在 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

于 2013-05-25T08:00:36.460 回答