Previous | Contents | Index |
Example 13-3 WHEN EXCEPTION USE |
---|
input 'Enter total sales amount': tsales input 'Enter number of sales': nsales when exception use fix_average average = tsales/nsales end when print 'The average is:'; average handler fix_average average = 0 continue end handler end Enter total sales amount? 25.00 Enter number of sales? 0 The average is: 0 |
WHEN EXCEPTION USE catches runtime exceptions and resolves them within a program when the same handler is needed for several protected blocks, or when all the handlers are to be in one place in a program.
WHEN EXCEPTION USE begins the protected block of code and specifies the HANDLER routine to use. handl_name is the name of the handler routine. The handler name must meet the specifications for variable names. The protected block is everything between the WHEN EXCEPTION USE and the END WHEN statements. If an exception occurs in this block of code, SheerPower calls the handler specified. If the handler does not exist, an error is generated.
HANDLER begins the handler routine. Everything between the HANDLER and the END HANDLER constitutes the handler routine. END HANDLER returns control to the statement following the END WHEN. When the handler is called, this block of code is executed. In the example above, SheerPower would normally return an exception when it tried to divide 25.00 by 0. The exception handler FIX_AVERAGE intercepts this exception and sets AVERAGE equal to 0.
The handler routine can occur before or after the protected block. For example:
Example 13-4 HANDLER/END HANDLER with WHEN EXCEPTION USE |
---|
handler fix_average average = 0 //<--- handler routine continue end handler input 'Enter total sales amount': tsales input 'Enter number of sales': nsales when exception use fix_average average = tsales/nsales end when print 'The average is'; average end |
One of the advantages of WHEN EXCEPTION USE is that the same handler routine can be called by any number of WHEN EXCEPTION USE statements. For example:
Example 13-5 HANDLER/END HANDLER with WHEN EXCEPTION USE |
---|
when exception use numbers input 'How old are you': age //<--- first protected block end when input 'Your name, please': name$ when exception use numbers input 'Your birthdate': birth //<--- second protected block end when print name$; ' was born on'; birth handler numbers print 'Enter numbers only, please.' //<--- handler routine retry end handler end How old are you? 31 <---- type in your age Your name, please? Sunny <---- type in your name Your birthdate? 10181969 <---- type in your birthdate (no spaces) |
13.4 HANDLER Routine Actions
13.4.1 RETRY
USE --- --- RETRY --- END WHEN or HANDLER handl_name --- --- RETRY --- END HANDLER |
Example 13-6 RETRY statement in HANDLER routine |
---|
input 'Your name, please': name$ when exception in input 'How old are you': age use print 'Not a valid age' retry end when print print name$; ' is'; age end Your name, please? Tester How old are you? 3x Not a valid age How old are you? 35 Tester is 35 |
RETRY is used after an exception to re-execute the statement that generated the exception.
RETRY can be used only in a HANDLER routine. RETRY causes SheerPower to leave the handler and re-execute the statement that generated an exception.
USE --- --- CONTINUE --- END WHEN or HANDLER handl_name --- --- CONTINUE --- END HANDLER |
Example 13-7 CONTINUE statement in HANDLER routine |
---|
input 'Enter total sales amount': tsales input 'Enter number of sales': nsales when exception use fix_average average = tsales / nsales end when print 'The average is:'; average handler fix_average average = 0 continue end handler end Enter total sales amount? 18.00 Enter number of sales? 0 The average is: 0 |
CONTINUE is used to continue normal program execution at the statement following the one that generated the exception.
CONTINUE causes SheerPower to exit the exception handler and continue program execution at the first statement following the statement which generated the exception. CONTINUE can only be used in a HANDLER routine.
USE --- --- RESUME target --- END WHEN or HANDLER handl_name --- --- RESUME target --- END HANDLER |
Example 13-8 RESUME statement in HANDLER routine |
---|
input 'Enter total sales amount': tsales input 'Enter number of sales': nsales when exception use fix_average average = tsales / nsales end when print 'The average is:'; average handler fix_average average = 0 print 'Invalid numbers. Try again.' resume 1 end handler end Enter total sales amount? 75.00 Enter number of sales? 0 Invalid numbers. Try again. Enter total sales amount? 75.00 Enter number of sales? 3 The average is: 25 |
RESUME is used to resume normal program execution at the routine name or line number that you specify.
RESUME causes SheerPower to exit the exception handler and resume program execution at the routine name specified.
RESUME can only be used in a handler routine.
USE --- --- EXIT HANDLER --- END WHEN or HANDLER handl_name --- --- EXIT HANDLER --- END HANDLER |
Example 13-9 EXIT HANDLER statement in HANDLER routine |
---|
when exception use mistake input 'Enter your age': age end when print 'You are'; age; 'years old' handler mistake print 'Oops...' delay 2 exit handler end handler end Enter your age? 3x Oops... Non-numeric input when number expected at 10.1 Enter your age? 35 You are 35 years old |
EXIT HANDLER is used to exit a handler routine and pass the exception up to the next level of exception handling.
EXIT HANDLER exits the current HANDLER routine. If the current handler is nested within another handler, SheerPower jumps to the outside handler and executes the code for that handler. If there is no other exception handler, control returns to the SheerPower system. SheerPower prints the exception message and takes whatever action it normally would.
EXIT HANDLER can only be used within an exception handler.
Previous | Next | Contents | Index |