防止Tcl在未知命令上崩溃

Ami*_*hum 6 tcl

我正在做eval文件的内容.该文件由我解析的标签组成.每行都有一个标签,我proc为每个标签定义了一个标签,以便eval成功.但是,有时用户添加新标签,然后eval命令失败,因为命令未知.

有没有办法防止Tcl在尝试eval未知命令时崩溃?
理想情况下,它应该允许我用我自己定义的行为替换 - 例如引用错误并继续使用eval.


编辑:

不幸的是,我只能使用Tcl 8.4.
按照这里的建议尝试了以下操作:

proc handle_unknown_label {cmd args} { ... }
Run Code Online (Sandbox Code Playgroud)

然后:

rename unknown _old_system_unknown
rename handle_unknown_label unknown

catch {set ret [eval $x]} err

rename unknown handle_unknown_label
rename _old_system_unknown unknown
Run Code Online (Sandbox Code Playgroud)

但我仍然得到相同的行为eval,它打印出以下错误:

过程未知是一个受保护的过程并且不会被重命名
过程未知是一个受保护的过程并且不会被覆盖
过程未知是一个受保护的过程并且不会被重命名
过程未知是一个受保护的过程并且不会被覆盖

Don*_*ows 2

实现您自己的名为 的命令unknown,该命令将构成无法找到的命令的所有单词及其参数作为其参数:

proc unknown {cmdName args} {
    puts "UNKNOWN COMMAND: $cmdName"
    puts "CALLED WITH ARGUMENTS: $args"
}
Run Code Online (Sandbox Code Playgroud)

这就是您需要做的全部事情,尽管您可以通过使用namespace unknown.