Non-fatal exceptions

There are two types of exceptions, fatal and no-fatal.
Ordinal errors such as division-by-zero and overflow are fatal exceptions.
Non-fatal exceptions are raised by specific statements or functions such as INPUT, PRINT USING, USING$-functions, BREAK-statements.
A non-fatal exception can be raised only if it is contained in a when-body.

INPUT
An INPUT statement has the default recovery procedure. Ordinarily an INPUT statement itself manages insufficiency or excess of data or inconsistency of data type to request re-input.
However, when an INPUT statement is written in a when-body, insufficiency or excess of data or inconsistency of data type raises an exception, and then let the control branch to the exception handler.
Example.

10 WHEN EXCEPTION IN
20    INPUT A,B$
30 USE
40    PRINT EXTYPE
50 END WHEN

The value of EXTYPE is as follows.
8102 syntactically incorrect input reply
8103 Non-numeric datum for a numeric variable.
8002 Too few data
8003 Too many data(or extra comma on the tail)

When an INPUT statement is written in a when-body, it is recommended to use a RERTY statement as follows.

100 WHEN EXCEPTION IN
110    INPUT A
120 USE
130    SELECT CASE EXTYPE
140    CASE 8102,8103,8002,8003
150        RETRY
160    CASE ELSE
170        ! Manages other exceptions
180    END SELECT 
190 END WHEN



PRINT USING,USING$
When a PRINT USING statement or a USING$ function is written in a when-body, the following exceptions can be raised.
EXTYPE
8203 Format-item too short
8204 Exrad overflow


BREAK
If a BREAK is executed on a when-body, it merely raises an exception of extype 10007, and does not display the debug window. Therefore it is difficult to debug a when-body using a BREAK statement.
(However, using Break-Points on the debug window enables us to debug a when-body.)