続行可能例外
例外(実行時エラー)には続行不能例外と続行可能例外の2種類がある。零除算や桁あふれなど,普通の実行時エラーは続行不能例外である。
続行可能例外は,when本体に書かれた場合にのみ発生する。続行可能例外を発生させる文・関数として,INPUT文,PRINT USING文,USING$関数,BREAK文,その他がある。
INPUT文
INPUT文には,それ自身に例外処理の機能が組み込まれている。入力したデータの数の過不足,型の不一致などは,INPUT文自身が処理して,再入力を要求する。
しかし,次のようにWHEN行とUSE行の間に書くとデータ数の過不足,型の不一致などがあると例外を発生させ,例外処理区に分岐する。
10 WHEN EXCEPTION IN 20 INPUT A,B$ 30 USE 40 PRINT EXTYPE 50 END WHEN
EXTYPEの値は,次のようになる。
8102 入力応答が構文的に正しくない
8103 数値変数に代入しようとした値が数値定数でない
8002 データ不足
8003 データ過剰(または最後のコンマが余分)
INPUT文をWHEN本体に書く場合は,次のようにRETRY文を利用するとよい。
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 ! 他の例外に対応するコードを書く 180 END SELECT 190 END WHEN
PRINT USING文,USING$関数
PRINT USING文で,書式のあふれが起こると,既定の回復手続きが適用され,出力欄を星印で埋め,次行に書式化されない形で出力し,さらに改行して例外状態にならなかったときと同じ印字位置から続行する。また,USING$関数では,書式のあふれが起こると,結果を書式と同じ個数の星印にして続行する。
PRINT USING文,USING$関数をWHEN本体に書くと,書式のあふれが起きたときextype=8203(指数部のあふれのときは8204)の例外が発生する。
BREAK文
BREAK文をwhen本体で実行すると,extype=10007の例外を発生させ,デバッグウィンドウは表示されない。したがって,BREAK文を使用してwhen本体をデバッグするのは困難。
(ただし,本BASICでは,ブレークポイントを利用すればwhen本体のデバッグも可能。)