Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
Python and Tcl - public course schedule [here]
Private courses on your site - see [here]
Please ask about maintenance training for Perl, PHP, Lua, etc
 
Error handling in Tcl through catch

Tcl is a truly interpretive language - and that means that you can get a syntax error if a user makes an illegal entry ... even in the middle of a program running. For example


puts -nonewline "please enter a number: "
flush stdout
gets stdin value
set doubled [expr $value * 2]
puts "Result is $doubled"
puts "application continues ..."


Will run correctly if you enter a number to the prompt as requested:


earth-wind-and-fire:~/jul05 grahamellis$ wish ifex
please enter a number: 17
Result is 34
application continues ...
earth-wind-and-fire:~/jul05 grahamellis$


but will fail if you enter something that isn't a number:


earth-wind-and-fire:~/jul05 grahamellis$ wish ifex
please enter a number: lots
Error in startup script: syntax error in expression "lots * 2": variable references require preceding $
  while executing
"expr $value * 2"
  invoked from within
"set doubled [expr $value * 2]"
  (file "ifex" line 6)
earth-wind-and-fire:~/jul05 grahamellis$


If you want to make your Tcl code rugged against such errors, embed commands that may cause a problem within catch commands. Tcl's catch command returns a true of false result depending on whether or not the embedded command succeeds, and if it fails it also returns the error message describing the problem in a variable of your choice. Here's the program above, enhanced to catch any errors:


puts -nonewline "please enter a number: "
flush stdout
gets stdin value
if {[catch {set doubled [expr $value * 2]} errmsg]} {
  puts "Failed - $errmsg"
} else {
  puts "Succeeded and result is $doubled"
}
puts "application continues ..."


And let's try running that. Firstly, with correct data:


earth-wind-and-fire:~/jul05 grahamellis$ wish ifcat
please enter a number: 17
Succeeded and result is 34
application continues ...
earth-wind-and-fire:~/jul05 grahamellis$


And now with data that would previously have caused a crash:


earth-wind-and-fire:~/jul05 grahamellis$ wish ifcat
please enter a number: many
Failed - syntax error in expression "many * 2": variable references require preceding $
application continues ...
earth-wind-and-fire:~/jul05 grahamellis$


Complete source code example - [here].

This approach described here could be described as an expection handling system as it tries to perform an operation and traps if a failure occurs, rather than trying to predict the error ahead of time. An alternative (error handling) system could have been used, in which the code check the input text string to make sure that it's numeric before the expr command is run. We have a comparison of exceptions v errors in our solution centre.
(written 2005-07-02, updated 2012-03-04)

 
Associated topics are indexed as below, or enter http://melksh.am/nnnn for individual articles
T214 - Tcl/Tk - Other Facilities in Tcl
  [4762] Coverage map in Tcl - how many times has each proc been called? - (2017-09-28)
  [4525] What does Tcl do if you try to run a command that is not defined? - (2015-10-10)
  [4523] Catching failed commands and not crashing the program in Tcl - (2015-10-10)
  [4207] Exception handling in Tcl - (2013-11-14)
  [3583] Expanding a list of parameters in Tcl - {*} and eval - (2012-01-17)
  [3570] Trapping errors in Tcl - the safety net that catch provides - (2012-01-06)
  [3287] Exceptions - Tcl style - (2011-05-12)
  [2467] Tcl - catching an error before your program crashes - (2009-10-22)
  [1338] Handling Binary data in Tcl (with a note on C) - (2007-09-09)
  [1334] Stable sorting - Tcl, Perl and others - (2007-09-06)
  [1277] AgtInvoke - a command to drive Agilent Tcl software extensions - (2007-07-26)
  [782] Converting between Hex and Decimal in Tcl - (2006-06-28)
  [748] Getting rid of variables after you have finished with them - (2006-06-06)
  [461] Shortened interactive commands - (2005-10-11)
  [364] pu daily and p hourly - (2005-06-30)
  [239] What and why for the epoch - (2005-03-08)


Back to
Letterbox Pictures
Previous and next
or
Horse's mouth home
Forward to
Ajax
Some other Articles
From Iceland
CMS - the minefield of Choices
Vacation Week
Ajax
Error handling in Tcl through catch
Letterbox Pictures
Greetings from Edinburgh
The ireallyreallywanna operator
Binary Large Objects or bars
4759 posts, page by page
Link to page ... 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96 at 50 posts per page


This is a page archived from The Horse's Mouth at http://www.wellho.net/horse/ - the diary and writings of Graham Ellis. Every attempt was made to provide current information at the time the page was written, but things do move forward in our business - new software releases, price changes, new techniques. Please check back via our main site for current courses, prices, versions, etc - any mention of a price in "The Horse's Mouth" cannot be taken as an offer to supply at that price.

Link to Ezine home page (for reading).
Link to Blogging home page (to add comments).

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2019: 404 The Spa • Melksham, Wiltshire • United Kingdom • SN12 6QL
PH: 01225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/366_Erro ... catch.html • PAGE BUILT: Sat May 27 16:49:10 2017 • BUILD SYSTEM: WomanWithCat