概要 - *error* 関数を使用する(AutoLISP)

*error* 関数を使用すると、エラーが発生した後に AutoCAD を確実に特定の状態に戻すことができます。

このユーザ定義関数を使用すると、エラー状況にアクセスして、適切なメッセージをユーザに示すことができます。AutoCAD が評価中にエラーを検出すると、次の形式でメッセージを出力します。

Error: text

このメッセージで、text はエラーの内容を表します。しかし、*error* 関数が定義されている(つまり、nil でない)場合は 、AutoLISP はメッセージを表示しないで、*error* を実行します。*error* 関数は text を 1 つの引数として受け取ります。*error* が定義されていない場合、または nil の場合は、AutoLISP の評価は中止され、エラーを発生させた関数とそれを呼び出している関数のトレースバックが表示されます。プログラムをデバッグする間は、このエラー処理を有効にしておくと役に立ちます。

最後のエラー コードはシステム変数 ERRNO に保存されます。このシステム変数の値は、getvar 関数を使用して調べることができます。

独自の *error* 関数を定義する前に、終了時に以前のエラー処理プログラムを復元できるよう、*error* の現在の内容を格納しておいてください。AutoCAD はエラー状態を検出すると、現在定義されている *error* 関数を呼び出し、その関数に 1 つの引数(エラーの内容が記述された文字列)を渡します。*error* 関数は、[Esc] (キャンセル)または exit 関数を呼び出した後で抑止終了するよう作成してください。通常は、次に示すようなエラー処理ルーチンを作成します(エラー メッセージは、半角全角の区別およびスペースの有無を含めて正確に入力する必要があります)。

(if
  (or
    (= msg "Function cancelled")
    (= msg "quit / exit abort")
  )
 (princ)
 (princ (strcat "\nError: " msg))
)

上記のコードは、渡されたエラー メッセージを調べ、エラーの性質を確実に評価します。実行中にユーザがコマンドまたは関数をキャンセルすると、このコードからは何も返されません。同様に、コード内でエラー処理をプログラミングし、そこで exit 関数を呼び出しても、何も返されません。メッセージを表示してエラーの性質を既に説明したものとみなされるからです。*error* 関数の最後に戻り値が表示されないようにするには、princ 呼び出しで終了することを忘れないでください。

エラー処理ルーチンで最も注意しなくてはならない点は、このルーチンは AutoLISP の標準の関数なので、ユーザがキャンセルできるということです。エラー処理ルーチンはできるだけ短く高速にしてください。そうすれば、呼び出した場合にルーチン全体が実行される可能性が高くなります。

[AutoCAD メッセージ]ボックスを表示して、ユーザにエラー状況を知らせることもできます。[AutoCAD メッセージ]ボックスは、プログラムが指定したメッセージと 1 つの[OK]ボタンが表示される小さなダイアログ ボックスです。[AutoCAD メッセージ]ボックスを表示するには、alert 関数を呼び出します。

次のように alert を呼び出すと、「File not found」というメッセージが表示された[AutoCAD メッセージ]ボックスを表示できます。

(alert "File not found")