期待脚本 - 提高例外

时间:2014-06-20 22:02:48

标签: exception error-handling tcl expect

我试图学习Expect脚本来运行后端进程,有没有办法从这种语言中引发并捕获错误异常?

实施例。蟒

try:
  raise Exception("test")
except Exception, e:
  print e

期望的等价物是什么?

#!/usr/bin/expect
package require Expect

# raise and catch exception

3 个答案:

答案 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}中添加了trythrow命令,以使这种事情变得更容易。在此之前(从远远超过我可以方便地搜索)你会改为做这样的事情:

if {[catch {
    error "test"
} e] == 1} {
    puts $e
}

在这种情况下,这很容易,但一旦事情变得更复杂,就更容易出错。