続行可能例外

 例外(実行時エラー)には続行不能例外続行可能例外の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本体のデバッグも可能。)

inserted by FC2 system