Tcl/Tk:実行時のエラーを捕捉したい

imoto
imoto
Altair Employee
edited September 2018 in 質問と回答 (Q&A)

HyperMeshやHyperView向けのTcl/Tkスクリプト内で、エラーが発生しても無視して継続させたい場合は、一般的なTclコマンドの『catch』を用います。

 

例えば、foreachなどを使って、各コンポーネント名から、アンダーバー(_)以降を消した名前に変更したい場合、「コンポーネントによってはアンダーバーが付いていない名前もあるかも知れない」ということがあるかも知れません。
実際、HyperMeshでは*renamecollectorコマンドを使って、「旧名」「新名」を引数で指定しますが、旧と新が同じ名前の場合、エラーとなりそこで処理が中断します。

 

何か処理に不安があるのであれば、『catch』を追加しておくと、エラーを無視して継続をさせることができます。

 

-例-

foreach compname [hm_entitylist comps name] {
 set newname [lindex [split $compname _] 0];
 catch {*renamecollector components $compname $newname};
}

 

<?xml version="1.0" encoding="UTF-8"?>before.jpg  <?xml version="1.0" encoding="UTF-8"?>after.jpg

図.実行前                                     図.実行後