Home Accessibility Courses Twitter The Mouth Facebook Resources Site Map About Us Contact
 
For 2021 - online Python 3 training - see ((here)).

Our plans were to retire in summer 2020 and see the world, but Coronavirus has lead us into a lot of lockdown programming in Python 3 and PHP 7.
We can now offer tailored online training - small groups, real tutors - works really well for groups of 4 to 14 delegates. Anywhere in the world; course language English.

Please ask about private 'maintenance' training for Python 2, Tcl, 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
  [239] What and why for the epoch - (2005-03-08)
  [364] pu daily and p hourly - (2005-06-30)
  [461] Shortened interactive commands - (2005-10-11)
  [748] Getting rid of variables after you have finished with them - (2006-06-06)
  [782] Converting between Hex and Decimal in Tcl - (2006-06-28)
  [1277] AgtInvoke - a command to drive Agilent Tcl software extensions - (2007-07-26)
  [1334] Stable sorting - Tcl, Perl and others - (2007-09-06)
  [1338] Handling Binary data in Tcl (with a note on C) - (2007-09-09)
  [2467] Tcl - catching an error before your program crashes - (2009-10-22)
  [3287] Exceptions - Tcl style - (2011-05-12)
  [3570] Trapping errors in Tcl - the safety net that catch provides - (2012-01-06)
  [3583] Expanding a list of parameters in Tcl - {*} and eval - (2012-01-17)
  [4207] Exception handling in Tcl - (2013-11-14)
  [4523] Catching failed commands and not crashing the program in Tcl - (2015-10-10)
  [4525] What does Tcl do if you try to run a command that is not defined? - (2015-10-10)
  [4762] Coverage map in Tcl - how many times has each proc been called? - (2017-09-28)


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., 2021: 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho

PAGE: http://www.wellho.net/mouth/366_Erro ... catch.html • PAGE BUILT: Sun Oct 11 16:07:41 2020 • BUILD SYSTEM: JelliaJamb