Version 12 of Exception Handling

Updated 2016-07-12 06:44:10 by pooryorick

Purpose: to discuss the issues of when and how to write exception handling code.

  • What is exception handling?
  • When should one write exception handling code?
  • When should one NOT write exception handling code?
  • What tools exist to aid in writing exception handling code?
  • How exception handling works

hv 2011-07-15: Here is a short snippet showing how to use the return command with -code error to throw an exception

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"
}

Output:

x = 5
2x = 10
x = Hello
Error: double expects an int, not 'Hello'

PYK 2016-07-11: For some time I was under the misapprehension that return -code error message was the "standard" way to throw an error. It's not. error is usually preferable. For one thing, error reports the line number where it was called. More importantly, the purpose of return is to communicate information back to the caller, which is a more general function. return can be considered a sort of restricted eval, providing more power for expressing various runtime conditions, while error and throw are the most direct methods of signalling an error.

See Also

try ... finally ...
throw
catch