我试图学习Expect脚本来运行后端进程,有没有办法从这种语言中引发并捕获错误异常?
实施例。蟒
try:
raise Exception("test")
except Exception, e:
print e
期望的等价物是什么?
#!/usr/bin/expect
package require Expect
# raise and catch exception
答案 0 :(得分:1)
在TCL中,您可以使用catch
来捕获异常:
if {[catch { package require Expect } errmsg]} {
puts "Import failed with message: $errmsg"
} else {
puts "Import succeeded"
}
要抛出异常,请使用return -code error
命令。例如:
proc double {x} {
if {![string is integer $x]} {
return -code error "double expects an int, not '$x'"
}
return [expr {$x * 2}]
}
set x 5
puts "x = $x"
puts "2x = [double $x]"
set x "Hello"
puts "x = $x"
if {[catch {puts "2x = [double $x]"} errmsg]} {
puts "Error: $errmsg"
}
输出:
x = 5
2x = 10
x = Hello
Error: double expects an int, not 'Hello'
答案 1 :(得分:1)
你的python示例的字面翻译是
set status [catch {error "test"} e]
if {$status} {
puts $e
}
这是Tcl 8.5
答案 2 :(得分:1)
如果您正在使用Tcl 8.6(Expect包将很好地加载),那么该Python代码的最直接的翻译是:
try {
throw Exception "test"
} trap Exception e {
puts $e
}
现在,在{8.6}中添加了try
和throw
命令,以使这种事情变得更容易。在此之前(从远远超过我可以方便地搜索)你会改为做这样的事情:
if {[catch {
error "test"
} e] == 1} {
puts $e
}
在这种情况下,这很容易,但一旦事情变得更复杂,就更容易出错。