MAXScript には C++ 例外処理手順を単純化した try 式があり、例外処理を簡単に行えます。
try 式を使用してコードの一部をカッコで囲み、コード内のランタイム エラーを見つけることができます。
これにより、MAXScript がスクリプトの実行を中止してエラー メッセージを出力する代わりに、適切に応答したり、正しい操作を実行することができます。
<protected_expr> が実行され、発生したエラーがトラップされて <on_err_expr> が実行されます。
<protected_expr> がブロック式である場合、このブロック式によってエラーの発生位置で実行が中止されます。
保護された式にエラーがない場合、<on_err_expr> は実行されません。
これは、非常に単純なエラー トラップ手法なので、エラー コードや発生したエラーに関する情報などは取得できません。
この例では、 read_some_data() 関数のデータの読み込みまたは処理中に発生したエラーがトラップされます。その後、メッセージ ボックスが表示され、クリーンアップが行われます。
関連する throw() 関数は、一時的なクリーンアップを行う場合に、独自のランタイム エラーを生成して捕らえたエラーを渡したり、非ローカル ジャンプを行うのに使えます。
介入する catch がスクリプト内にない場合は、引数にエラー メッセージを指定して throw() を呼び出すと、ランタイム エラーが表示され、MAXScript の標準エラー レポート機能によってエラー メッセージがレポートされます。
2 つ目のオプションの引数は、エラー メッセージで出力する任意の値(おそらくエラーに関連するオブジェクト)です。
throw が catch() 本体にある場合、この 2 番目の引数は指定できません。指定するとコンパイル エラーが生成されます。
try / catch が別の try 式内にある場合に throw() を呼び出すと、外部の try 式に関連付けられている catch 式が実行されます。
介入する catch がスクリプト内にない場合は、 throw() を呼び出すと、MAXScript は try / catch を囲むカッコ内の先頭からスクリプトの実行を継続します。または、 try / catch を囲むカッコがない場合は、現在実行中のスクリプトを中止します。
何らかの処理(クリーンアップ処理など)を施すためにエラーをキャッチし、外部ハンドラか MAXScript にエラーを渡してエラーをレポートするには、 throw() を引数なし呼び出します。
これは、現在のエラーを送出するので、エラーのレポートは必ず catch 式の中で行わなければなりません。
キャッチ ステートメント内のみで役立ちます。キャッチ外で使用すると、「undefined」が返されます。
hasCurrentExceptionStackTrace()
3ds Max 2017 以降で使用可能: MAXScript スタック トレースを使用できる場合は true を返します。役に立つのはキャッチ ステートメント内のみです。キャッチ外で使用すると、false が返されます。キャッチ内では常に true が返されます。
hasCurrentExceptionCallStack()
3ds Max 2017 以降で使用可能: C++ スタック トレースを使用できる場合は true を返します。役に立つのはキャッチ ステートメント内のみです。キャッチ外で使用すると、false が返されます。キャッチ内で true となるのは、キャッチされた例外がアクセス違反や 0による整数の除算などのシステム例外であった場合のみです。
getCurrentExceptionStackTrace()
3ds Max 2017 以降で使用可能: MAXScript スタック トレースを文字列として返します。役に立つのはキャッチ ステートメント内のみです。キャッチ外で使用すると、false が返されます。キャッチ内では常に true が返されます。
getCurrentExceptionCallStack()
3ds Max 2017 以降で使用可能: 例外が発生したときにキャプチャされた C++ スタック トレースを文字列として返します。キャッチ ステートメント内のみで役立ちます。キャッチ外で使用すると、「undefined」が返されます。キャッチ内で C++ スタック トレースがキャプチャされなかった場合は、空の文字列が返されます。
CaptureCallStack [skipFirstNStackLevels:<int>]
3ds Max 2017 以降で使用可能: MAXScript コール スタックをキャプチャします。skipFirstNStackLevels パラメータが指定されていない場合、既定値は 3 です。
<string> getErrorSourceFileName()
3ds Max 2018 の 新機能 : catch ステートメント内で呼び出されたときにエラーを引き起こすソース ファイルの名前を返します。これは、fileIn() を使用するなどの方法で、複数のスクリプトからコードを実行する場合に便利です。
<integer> getErrorSourceFileLine()
3ds Max 2018 の 新機能 : catch ステートメント内で呼び出された場合は、エラーが発生した行番号を返します。
<integer> getErrorSourceFileOffset()
3ds Max 2018 の 新機能 : catch ステートメント内で呼び出された場合は、エラーが発生したオフセットを返します。コメントを含む評価中の式は、ここまでです。