如何在TCL中捕获subst异常



下面是一个代码示例:

set my_ref {$undefined_array(some_key)}
set my_val [subst $my_ref]

返回:

can't read "undefined_array(some_key)": no such variable
    while executing
"subst $my_ref"

根据http://wiki.tcl.tk/1501

看起来现在没有办法抓住这个

subst试图对您给它的文本执行替换时,它需要一个具有匹配名称的现有变量。如果不存在这样的变量,subst抛出TCL LOOKUP VARNAME异常。

如何捕捉?您可以在 subst失败后捕获异常,使用catchtry。您提到的讨论是关于在 subst失败之前捕获异常的AFAICT,我认为这仍然是不可能的。

埃塔:

我的"区别尝试"评论的概念验证。这段代码有很多潜在的问题,但至少基本上展示了如何实现它。在这个例子中,处理程序的反应是创建一个变量,该变量以大写形式表示自己的名称作为值。

# CAUTION: demonstration code, do not use without modification 
proc handler varName {
    upvar 1 $varName name 
    set name [string toupper $varName]
}
unset -nocomplain foo bar 
set baz xyz 
set str {$foo $bar $baz}
while true {
    try {
        subst $str 
    } on ok res {
        break 
    } trap {TCL LOOKUP VARNAME} {msg opts} {
        handler [lindex [dict get $opts -errorcode] end]
    }
}
set res
# -> FOO BAR xyz

相关内容

  • 没有找到相关文章

最新更新