![見出し画像](https://assets.st-note.com/production/uploads/images/162051512/rectangle_large_type_2_d31436fd204c42f166ae867dbf2fbfe1.png?width=1200)
【いきなりStudio10】(ソース・テンプレート編)Try-Catchアクティビティでガチろう~トライキャッチこそ、ガチラー(安全にロボットをコカす人)の嗜み。教科書どおりな人は必ずFinallyでやらかす( ´∀` )
さてと、連投(これ終わったらジムに行こ💃)
前回、
ロボットを安全にコカすアクティビティ
Throwの考え方と使い方
については説明したので~~~
今回は、
コケた後の対処方法
☞エラーハンドリングの基本
について、説明してく💃
んだば、早速( ´∀` )
トライキャッチアクティビティ
ま、知識としては、
を見といてもらうとして( ´∀` )
前回のスローのみでトライキャッチがないとどうなるかを検証( ´∀` )
前回までのソースをMainから実行してみる( ´∀` )
![](https://assets.st-note.com/img/1731739759-mASWgB3CxKl7TfRpzreh9jVs.png)
![](https://assets.st-note.com/img/1731739814-zgeXN8I9LdYfo2cTMFw6W5Dv.png?width=1200)
出力の詳細を見ると、
![](https://assets.st-note.com/img/1731739899-ItyAk0zP8GJRghMUDLEjFdlc.png?width=1200)
うじゃっとすっごいことになってんね( ´∀` )
今度は前回と同じ位置でブレークポイントを入れて
![](https://assets.st-note.com/img/1731739998-jPqTvx1JSbEXWDwhGkLp43sZ.png?width=1200)
Main.xamlから、今度はステップインで実行して、
![](https://assets.st-note.com/img/1731740088-KVapPwRoHBWvuCFZ6lLOtySq.png)
エラー発生後にどういう処理を辿るか
を見てみよう( ´∀` )
![](https://assets.st-note.com/img/1731740118-lipWvJ5zjEhDxXTIFawUQKtR.png?width=1200)
ステップインで、ブレークポイント箇所の次のアクティビティへ行くか
![](https://assets.st-note.com/img/1731740179-NHVKros96DluapZ1XixCj7cy.png?width=1200)
![](https://assets.st-note.com/img/1731740206-zBxULYmr81IKflhvwj65e0Ok.png?width=1200)
![](https://assets.st-note.com/img/1731740268-sK19GIO3lrS8MeVpc5HmkDNF.png?width=1200)
RobotMainに行ったねえ( ´∀` )
![](https://assets.st-note.com/img/1731740323-gsE2ja8c1W3bfoXHBrkqP5Cp.png?width=1200)
![](https://assets.st-note.com/img/1731740354-5d4xcJzfyCHKvaOw708TDBkQ.png?width=1200)
さらに最後までステップインを続けると最終的に
![](https://assets.st-note.com/img/1731740391-CXP9UxEBaoDjpKteTO0nuJGV.png?width=1200)
さっきと同じように出てるね( ´∀` )
とまあ、実はこれが
ロボットが安全にコケてる
状態なんで、別にこのままで良ければ何もしなくていいんだけど、
エラー発生時に、エラー発生用の処理をしたい
って時に有効なのが、今回の
Try-Catchアクティビティ
操作
アクティビティとしては
![](https://assets.st-note.com/img/1731740610-N2O0dCXe4phPGKFRElix3DnY.png)
組み込むと、
![](https://assets.st-note.com/img/1731741022-zgf2h6ydIxGjBQSiJ1LAp9sW.png?width=1200)
ここでポイント①:処理単位を意識する
トライキャッチは、
Try:正常処理(この中でエラーがあれば例外にスロー)
Catch:例外処理(例外=スローされたエラーをキャッチ)
Finally:正常であろうと、例外であろうと必ず最後に処理される
って感じで今まで作っていたのは、
正常処理=ReadConfigって単位で
ひとつの処理で固まってる
ので、こんなデザインになってると
![](https://assets.st-note.com/img/1731741265-dUHvaZuyDJNz6tQF2linxKs1.png?width=1200)
て人がいるんだけど( ´∀` )
![](https://assets.st-note.com/img/1731741350-K8gc9nOBFuxaijV6PowMJRpd.png?width=1200)
Try=正常処理
の中に移動してあげるだけ( ´∀` )
![](https://assets.st-note.com/img/1731741338-xuWtDE24GV8BymAe57Ibz0XY.png?width=1200)
で、赤いビックリマークにマウスの矢印を当てると
![](https://assets.st-note.com/img/1731741452-X1LbAhrEy8ORtpIwB6mPas0J.png?width=1200)
なんかアクティビティを入れろや
と怒っているので~~~~
RobotMainにReadConfigでの実行エラー結果を返せるように
![](https://assets.st-note.com/img/1731741594-AaOZ0jeubyR5n1zD84dScLqN.png)
![](https://assets.st-note.com/img/1731741637-oagw9qh1sWnz405HjYRI3uZT.png)
![](https://assets.st-note.com/img/1731741667-2pd0ZLvRtuzK3Im891BJMnqr.png?width=1200)
で作った
![](https://assets.st-note.com/img/1731741699-tjezOGdVlWc8HJZo93Ryan4k.png)
![](https://assets.st-note.com/img/1731741829-6J0YoPkUgSHQuNfvmcCFAxbh.png?width=1200)
"ロボットが異常終了しました。詳細はエラーメッセージを確認してください。"
![](https://assets.st-note.com/img/1731741901-VYDLUKfu3odctek168Ir4axN.png?width=1200)
Mainを選択して、実行
![](https://assets.st-note.com/img/1731741959-VJykWaHvE4XFBKs3jxOqnugl.png)
![](https://assets.st-note.com/img/1731742058-iu2cgJrHB13Km6Mzl9QRXLAW.png?width=1200)
![](https://assets.st-note.com/img/1731742169-b3DX8PoYxQwkS2HFnis6mWvO.png)
消えてしまうので~~~
さっきの右辺の値を
![](https://assets.st-note.com/img/1731742336-0Cn5JleaT8HuMsQjvVkq3mbL.png?width=1200)
exception.Message
に変更してあげるだけで~~~
![](https://assets.st-note.com/img/1731742386-xQpeaJC39Z6kmycb7WHlNDvI.png?width=1200)
とここまでは例外処理における基本でExceptionを使ったけども( ´∀` )
前回ゆーたとおり、エラーには大きく分けて
ビジネスエラーとシステムエラーがあるので~~~
![](https://assets.st-note.com/img/1731742630-XRzSvbkAaP2fo8xMFCEr0KUD.png?width=1200)
を分けてあげる方が現実的( ´∀` )
さっきのままだと
ビジネスエラーだろうが、
システムエラーだろうが、
使い分けが出来ないからね👀💦
で、再度実行しても
![](https://assets.st-note.com/img/1731742748-ICpNPV01evHAxcJi2UsfSlwy.png?width=1200)
これを最初からステップインして要所要所をキャプチャしてくと👀
![](https://assets.st-note.com/img/1731742835-csaVr4jv1HAU5p6FICYmuk3z.png?width=1200)
![](https://assets.st-note.com/img/1731742912-7I1YKFbtv8RWxoBuqNMVQfSh.png?width=1200)
![](https://assets.st-note.com/img/1731742971-Pco3VTutb9dqaC2jYxNgBHnW.png?width=1200)
ことを確認
![](https://assets.st-note.com/img/1731743033-qJoxYBc5tCelQj2VSngzuL1E.png?width=1200)
![](https://assets.st-note.com/img/1731743062-Jb96eECvwL3U1ku2hIPdqt7F.png?width=1200)
図のようにエラー発生
![](https://assets.st-note.com/img/1731743115-Fex9glUD5dMzAN1XKa0O8iby.png?width=1200)
Catches=例外の方に進んで
しっかりビジネスエラーの方に入った
ことが確認出来るね👀
![](https://assets.st-note.com/img/1731743189-qkG21mMjt4DPbFAX7hNlv0nR.png?width=1200)
きちんと実行出来たのが分かる( ´∀` )
![](https://assets.st-note.com/img/1731743238-r6bjiysGTlDzNhZ3HKqteQAd.png)
ここでポイント②:なんでこんな面倒なことしてんの❓👀失敗するとダイアログボックスで画面表示されるからそれで良くない❓👀
理由としては2つ
エラーが発生したときも、専用の実行ログに残したいみたいな処理を入れたいときに困る
ロボットを完全自動化したときに、人が画面なんか見ないでロボットが定期的に時間がきたら実行するだけだから
☞いくら画面にエラーの内容なんざ表示しても、
そもそもパソコンの前に人が必ずしも張り付いていない
てか、せっかく自動化してんのに、
人がPCの前に必ずいないといけないんだったら
自動化の意味ないじゃん( ´∀` )
業務でロボットを利用してる人は、
OC上のジョブログか専用の実行ログで処理が確実に終わったかどうか
エラーがあった場合は、エラーから次に何をする必要があるか
くらいしか、
知識もないし、作れないし、
気にしなくていいんだから( ´∀` )
てか、知識もあって、作れて、エラー原因も自分で調査して改修出来るなら
そもそも、自分で作るだろ( ´∀` )
エンジニアが何のために存在するか
を考えろや( ´∀` )
ここでよもやま:教科書どおりの駆け出しちゃんで本当によくやらかすんだけど
![](https://assets.st-note.com/img/1731743822-rMLq8bYZsinVPxOQGjvfUzoE.png?width=1200)
メッセージをログを追加してみよう
![](https://assets.st-note.com/img/1731743916-u0g9pyMIKwGoDXxb3iOdVLWY.png?width=1200)
でMainから実行すると、
![](https://assets.st-note.com/img/1731743979-7S0aCv5dcyl8DQf1sWuMbXAE.png?width=1200)
フォルダのパスを戻して~~~
![](https://assets.st-note.com/img/1731744037-mUDlLwbCAIGvQ9V4ap8gY5dy.png?width=1200)
![](https://assets.st-note.com/img/1731744092-JvY7NZKw29QSLjaA1lhXeTqW.png?width=1200)
で正常処理=Tryで通るはずなので、実行してみると
![](https://assets.st-note.com/img/1731744173-kWLrtQ5iCSBsHFweDJO01gu3.png?width=1200)
そ、つまり
Finallyに入れちゃうと、
正常かエラーかにかかわらず、
必ずその処理は通っちゃう( ´∀` )
これを知らないか肌感覚で分かってないと、
エラー拒否症候群
な人ほど
![](https://assets.st-note.com/img/1731744311-H3io0LxTVGXtdJlhNqs8WBCI.png)
アクティビティの構成がこうなっている
隙間とか空欄箇所があると処理漏れとかエラーが発生しちゃうんじゃないか
と、
ついついFinallyに余計な処理を入れて、
却って、余計なエラーや想定外の処理結果
を発生させる( ;∀;)
ってなっちゃうからねえ。
こんな初歩的なミスを何年も繰り返してるのに、
自称プロの多いこと、多いこと( ´∀` )
(個人的には毎回遭遇する度に、「バカなの❓👀」
て思ってることはココでは内緒にしとく)
エラーハンドリングの基本:Try-Catchのまとめ
Try:正常処理(この中でエラーがあれば例外にスロー)👈必須
Catch:例外処理(例外=スローされたエラーをキャッチ)👈必須
Finally:正常であろうと、例外であろうと必ず最後に処理される👈任意。必要な時以外、処理は入れない。
だからオイラも今回のタイトルとか前回の最後で、
トライキャッチ
とはゆーてるものの
トライキャッチファイナリー
とはゆーてないでしょ( ´∀` )ここをよく理解してなくて、
「いやいや、トライキャッチじゃなく、
トライキャッチファイナリーでしょ。」
みたいな自称ちゃんもいるが、
(いや、ファイナリーはほぼ使わないから、みんなトライキャッチてゆーてるんだが、逆に教科書丸暗記な自称プロな人かな👀💦❓)
て思うのもココでは内緒にしとく💦
内容は以上。さてと、後は恒例の
ソース・リファクタリング
■リファクタリング前
![](https://assets.st-note.com/img/1731745085-eRIzQmP0jvxA8sy3fKS5Zhup.png?width=1200)
■リファクタリング後
![](https://assets.st-note.com/img/1731745346-s5lI8bNZMhnp9USdtofA0cwQ.png?width=1200)
![](https://assets.st-note.com/img/1731745369-jJnhARUpvG61OuBaH508EitK.png?width=1200)
![](https://assets.st-note.com/img/1731745389-H9cSTzo1j4XYEVCxF7whuN0Q.png?width=1200)
関連記事:シーケンスについては、
なんかで、StudioXではあるけど、過去に遊んでるから参考にしてみてね~~~
さてと、次回は
フォルダの確認まで出来たところで、今度は
Configファイル自体の確認をする
☞ファイルの存在を確認アクティビティ
をやってく💃前々回~今回までで考え方も説明してるので、サクサクやってく( ´∀` )まあどうせ、
よもやま話は長くなるだろうが( ´∀` )
じゃ、また来週
ジム行って文藝春秋の続き
を読んで寝まする( ´∀` )