概要 - エラー処理(AutoLISP)

AutoLISP 言語には、エラーを処理するための関数がいくつかあります。

エラーを正しく処理することにより、プログラムを丁寧に、予期される結果で終了することができます。AutoLISP プログラミング言語のエラー処理関数を使用することにより、次のことを行うことができます。

次の関数は、プログラムによって発生したエラーの処理に役立ちます。

プログラムの同じ式に複数のエラーがあると、AutoLISP がエラーを検出する順番を当てにできません。たとえば、inters 関数には複数の引数を指定する必要があり、各引数に 2D または 3D の点リストを指定する必要があります。次のように inters を呼び出します。

(inters 'a)

次の 2 つのエラーが発生します。引数の数が少なすぎることと、引数のタイプが違っていることです。次のエラー メッセージのどちらかが表示されます。

; *** ERROR: too few arguments
; *** ERROR: bad argument type: 2D/3D point

プログラムはどちらのエラーも処理するよう設計してください。

注: AutoLISP は引数のタイプをチェックする前にすべての引数を評価します。AutoCAD の旧リリースでは、AutoLISP は各引数のタイプを順次評価してチェックしました。この違いを確認するには、次のコード例を見てください。
(defun foo ()
  (print "Evaluating foo")
  '(1 2))

(defun bar ()
  (print "Evaluating bar")
  'b)

(defun baz ()
  (print "Evaluating baz")
  'c)

inters 関数を使用した式が、AutoCAD ではどのように評価されるか注目してください。

コマンド: (inters (foo) (bar) (baz))

"Evaluating foo"

"Evaluating bar"

"Evaluating baz"

; *** エラー: 引数の数が少なすぎます

各引数は、AutoLISP が結果を inters に渡して、指定された引数の数が少なすぎることを検出する前に、正常に評価されました。

AutoCAD R14 以前では、同じ式が次のように評価されます。

コマンド: (inters (foo) (bar) (baz))

"Evaluating foo"

"Evaluating bar" error: 引数のタイプが違っています

AutoLISP は (foo) を評価してから inters に結果を渡します。結果が有効な 2D 点リストであるため、AutoLISP は続けて (bar) を評価し、ここで評価した結果が文字列で inters に対しては無効な引数タイプです。