問題タブ [try-catch]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
3 に答える
5454 参照

perl - Perlでコイからの出力をキャッチするにはどうすればよいですか?

私はPerlモジュールを作成しており、carpを使用して、致命的ではない警告を呼び出し元のプログラムに返しています。

鯉の警告は正常に機能します-入力パラメーターが特定の条件を満たしているかどうかを確認しています-条件を満たさない場合、警告が鯉とともに送信され、モジュールは呼び出し元のプログラムではなく、パラメーターのデフォルトを使用し続けます合格した。警告は、渡されたパラメータの代わりにデフォルトのパラメータが使用されていることを通知するためのものです。

私の問題は私のテストスクリプトにあります。テストスクリプトがモジュールに不正なパラメータを送信しています。戻ってきた警告メッセージをキャッチして、正しい警告メッセージが表示されたことを確認しようとしています。

私のモジュールは次のようになります。

私のテストスクリプトは次のようになります。

テストを実行すると、画面に警告(STDERRに送信される必要があります)が表示されますが、$@変数の内容は''-空白です。

これが私のテストスクリプトからの出力です:

コイを鳴き声に変更すると、テストスクリプトが機能します。エラーメッセージが表示されます(ただし、警告するだけで、中止することはできません)。

正直なところ、私はevalを最もよく理解していません。おそらく、それはコイからの警告出力をキャッチするための最良の方法ではありません。$ SIG {__ WARN__}を使用してみましたが、それも空でした。

コイからの出力をキャプチャする方法はありますか?これは私のテストスクリプトに含まれているため、これは最大の問題ではありませんが、テストスクリプトを正しく機能させたいと考えています。

前もって感謝します!

0 投票する
15 に答える
3165 参照

c++ - C++でJavaのtry/finalを模倣するための好ましいイディオムはありますか?

Javaを何年もやっているので、C++を追跡していません。最終的に、言語定義のC ++例外処理に句が追加されましたか?

Javaのtry/finalを模倣する好ましいイディオムはありますか?

また、JavaのThrowableクラスのように、C ++には、スローされる可能性のあるすべての例外に対する究極のスーパータイプがないことも気になります。

私は書くことができます:

補遺編集:

投票数が最も多かった、つまりデストラクタを使用してクリーンアップを行う回答を受け入れることになりました。もちろん、私自身のコメントから、私がそれに完全に同意しないことは明らかです。ただし、C ++はそれ自体であるため、私が念頭に置いているアプリケーションの取り組みでは、多かれ少なかれ、一般的なコミュニティの慣習に従うように努めます。テンプレートクラスを使用して、クラスデストラクタがまだないリソース(つまり、Cライブラリリソース)をラップし、デストラクタセマンティクスを付与します。

新しい補遺編集:

うーん、最終的には閉鎖機能ではなく、おそらく?ScopeGuardアプローチ(以下の回答の1つを参照)と組み合わせたクロージャーは、任意のアクションとクリーンアップコードの外部スコープコンテキストへのアクセスを使用してクリーンアップを実行する方法になります。クリーンアップは、リソースが開かれているときにクリーンアップブロックを提供するRubyプログラミングで見られるイディオム方式で実行できます。C ++ではクロージャ機能が検討されていませんか?

0 投票する
7 に答える
301 参照

c# - Handling exceptions vs. Preventing them from occuring in the first place - C#

I have a asp:BoundColumn with DateTime? data (i'll call it column X) in the asp:GridView. I loop through all the rows in the grid, and cast the .Text property to column X to DateTime (i need this to do some checking and change the cell background color if needed).

I have 2 options:

  1. wrap the cast in try/catch ... handle FormatException (in case column X gets rendered with some junk in it) ... and work only with valid DateTime values.

  2. check the column X to make sure it's in the correct format (how?) before casing, and only cast if format is ok.

Which approach should i take, and why?

Thank you.

p.s. 1 up-vote for all explanations, accepted answer for TryParse

Edit2: even though i used TryParse, I've unchecked the accepted answer to keep the discussion going.

My "good data"/"bad data" ratio is about 2/1 - this means lots of bad input

I'll re-accept the answer in a couple of days, if nothing else comes up.

0 投票する
6 に答える
8740 参照

c++ - C++ 基本例外のキャッチ

私のプロジェクトでは、基本的な例外があります。エラーダイアログ表示やログ表示などのハンドリングに。その例外のすべての派生クラスを処理する方法を探していますが、これでうまくいくと思いました:

スローされたすべての子インスタンスは、その親へのポインターで表すことができます。しかし、例外がスローされると、未処理の例外になります。

どうしてこれなの?c++ は参照としてのみ例外をスローしますか? それによって私の catch ブロックを役に立たなくしますか? しかし、そもそもなぜこれがコンパイルされるのでしょうか?

私が考えることができる唯一の他の方法はこれです:

ちょっと醜いようです。これを行う正しい方法は何ですか?基本例外クラスがありませんか? それとも、私が望む方法で解決できますか?

Ps:handle_error()基本クラス関数を使用してdisplay_message_box()、プログラムを完全にシャットダウンするだけです。

0 投票する
1 に答える
1347 参照

sql-server-2005 - SQL Server 2005 で try...catch を使用してトリガーを作成する

次のトリガーを実装しました。

別のテーブルから一連の外部キーをクリアしてから、現在のレコードを削除します。これは、削除時に外部キーを null に設定しても機能しないためです。

私の質問は、このトリガーを try...catch ブロックにラップして、例外が発生した場合にロールバックできるようにすることです。それは良い習慣であり、この種のトリガーに対してそれを行う必要がありますか?

ありがとう、ジェイソン

0 投票する
7 に答える
13693 参照

javascript - Javascript: IF ブロックと TRY/CATCH のどちらが効率的ですか?

このコードでより効率的なものについて、他の意見が欲しいです。基本的に、次のコードには setInterval ループがあり、コードがループ内で実行される前に 4 つの要件を満たす必要があります。したがって、v.1 では、4 つすべてをチェックする if ステートメントを書きました。うまくいきました。

次に、実行したいコードを try{} に置いて、try/catch のみを使用するように切り替えました。ロジックは、各ループ中に例外が生成されますが、無効な条件ごとに抑制されます。すべての条件が真である最後のループで、コードが実行され、間隔がクリアされます。

どちらでも動作します。私が try/catch メソッドを気に入っているのは、書く必要があり、壊れることを心配する必要のある条件付きコードが少ないからです。しかし、特に setInterval() ループが 100 ミリ秒に達した場合に、try/catch が本当に非効率的ではないかと心配しています。SOに関する他の明るい人の意見は何ですか?

トライ/キャッチ

IF ブロック

0 投票する
6 に答える
5927 参照

sql-server - SQLServer の try catch のパフォーマンス

古い IF @@ERROR <> 0 と比較して、SQL Server 2008 で BEGIN TRY..END TRY を使用することのパフォーマンスの向上/トレードオフを見つけた人はいますか? パフォーマンスのペナルティがあるかどうかを知りたいだけです。

0 投票する
3 に答える
5897 参照

c++ - Linux C++ でシステムレベルの例外をキャッチするにはどうすればよいですか?

次の catch() は呼び出されません。

この種の例外をキャッチする方法はありますか?

0 投票する
3 に答える
579 参照

c# - Entity FrameworkのCreateOrUpdateメソッドでtry-catchに依存しても大丈夫ですか?

これを行うことは許容されますか?まず、エンティティを追加してみてください。追加が失敗した場合、それはエンティティがすでに存在することを意味するため、問題ではありませんか?

または、よりエレガントで簡単な解決策はありますか?

OK私はそれを短縮しました...

0 投票する
3 に答える
4753 参照

c# - キャッチ内の MessageBox.Show の問題

次のコードを実行しようとすると、未処理の例外が発生します。MessageBox.Show 行をコメントアウトすると、問題が解決することがわかりました。珍しいことに、コードの他の部分の他の catch{ } セグメントで MessageBox.Show ステートメントを使用しましたが、問題はありませんでした。私の質問は、例外が発生する理由を知っている人はいますか?

(Ps Reports_Group_Chooser は ComboBox です)

コード:

エラー(ほとんどの場合):

未処理の例外: System.NullReferenceException: オブジェクト参照が System.Windows.Forms.ComboBox.DropDownListBoxFinished () [0x00000] でオブジェクトのインスタンスに設定されていません (wrapper remoting-invoke-with-check) System.Windows.Forms.ComboBox :DropDownListBoxFinished () System.Windows.Forms.ComboBox+ComboListBox.HideWindow () [0x00000] で System.Windows.Forms.ComboBox+ComboListBox.OnMouseUp (System.Windows.Forms.MouseEventArgs e) [0x00000] で System.Windows .Forms.Control.WmLButtonUp (System.Windows.Forms.Message& m) System.Windows.Forms.Control.WndProc で [0x00000] (System.Windows.Forms.Message& m) System.Windows.Forms.ComboBox で [0x00000] +ComboListBox.WndProc (System.Windows.Forms.Message& m) System.Windows.Forms.Control+ControlWindowTarget で [0x00000]。OnMessage (System.Windows.Forms.Message& m) System.Windows.Forms.Control+ControlNativeWindow.WndProc で [0x00000] (System.Windows.Forms.Message& m) System.Windows.Forms.NativeWindow.WndProc で [0x00000] ( IntPtr hWnd、Msg msg、IntPtr wParam、IntPtr lParam) [0x00000] System.Windows.Forms.XplatUIX11.DispatchMessage (System.Windows.Forms.MSG& msg) で [0x00000] System.Windows.Forms.XplatUI.DispatchMessage (システム.Windows.Forms.MSG& msg) [0x00000] System.Windows.Forms.Application.RunLoop (ブール モーダル、System.Windows.Forms.ApplicationContext コンテキスト) [0x00000] でWndProc (IntPtr hWnd、Msg msg、IntPtr wParam、IntPtr lParam) System.Windows.Forms.XplatUIX11.DispatchMessage で [0x00000] (System.Windows.Forms.MSG& msg) System.Windows.Forms.XplatUI.DispatchMessage で [0x00000] (System.Windows.Forms.MSG& msg) [0x00000] System.Windows.Forms.Application.RunLoop (ブール モーダル、System.Windows.Forms.ApplicationContext コンテキスト) [0x00000] でWndProc (IntPtr hWnd、Msg msg、IntPtr wParam、IntPtr lParam) System.Windows.Forms.XplatUIX11.DispatchMessage で [0x00000] (System.Windows.Forms.MSG& msg) System.Windows.Forms.XplatUI.DispatchMessage で [0x00000] (System.Windows.Forms.MSG& msg) [0x00000] System.Windows.Forms.Application.RunLoop (ブール モーダル、System.Windows.Forms.ApplicationContext コンテキスト) [0x00000] で

どんな助けでもマイケルに感謝

更新これは、エラーを引き起こさない私のコードで動作する MessageBox.Show の例です:

更新の更新:

問題は、コンボボックス イベント内に MessageBox.Show があるだけのようです: 次のコードでも同じエラーが表示されます: