タグ付けされた質問 「exception-handling」

例外は、プログラムの通常のフローからの逸脱を必要とする異常な状態です。通常、例外は完全に失敗することはなく、代わりに例外ハンドラーが付きます。例外処理は、多くのプログラミング言語に組み込まれている構造です。通常、例外はスタックを巻き戻し、例外のスコープ外の定義された状態にロールバックしてからハンドラーブロックまたはルーチンを呼び出すことによって処理されます。

5
C ++例外をスローする方法
例外処理(つまり、自分の目的のためにスロー、トライ、キャッチのステートメントをカスタマイズする方法)について非常によく理解していません。 たとえば、次のように関数を定義しました。 int compare(int a, int b){...} aまたはbのいずれかが負の場合に、関数がメッセージを表示して例外をスローするようにしたい 関数の定義でこれにどのように取り組むべきですか?

5
try {return x;で実際に何が起こるか }最後に{x = null; }ステートメント?
私は別の質問でこのヒントを見て、誰かがこれが一体どのように機能するかを私に説明できるかどうか疑問に思っていましたか? try { return x; } finally { x = null; } つまり、finally文節はステートメントの後に実際に実行されreturnますか?このコードはどのようにスレッドセーフではありませんか?このtry-finallyハックに対して実行できる追加のハッカーについて考えることができますか?


11
1つのcatchブロックで複数の例外タイプをキャッチする
私はキャッチに、以下の機能を取得するためにクリーンな方法を希望AErrorし、BError1つのブロックに: try { /* something */ } catch( AError, BError $e ) { handler1( $e ) } catch( Exception $e ) { handler2( $e ) } これを行う方法はありますか?それとも別々にキャッチする必要がありますか? AErrorそして、Berror共有ベースクラスを持っていますが、私はにフォールスルーしたいことを、彼らはまた、他のタイプとそれを共有しhandler2、私はちょうど基本クラスをキャッチすることはできませんので、。

6
WPFアプリケーションで例外をグローバルにキャッチしますか?
実行時に例外がスローされるWPFアプリケーションがあります。未処理の例外をグローバルにキャッチしてログに記録しますが、それ以外は何も起こらなかったかのようにプログラムの実行を続行します(VBのようなものOn Error Resume Next)。 これはC#で可能ですか?もしそうなら、例外処理コードをどこに置く必要がありますか? 現在、try/をラップして、catch発生する可能性のあるすべての例外をキャッチできる単一のポイントを確認できません。そして、それでも私はキャッチのために実行されたものは何でも残していたでしょう。または私はここでひどく間違った方向に考えていますか? ETA:以下の多くの人々がそれを指摘したので:アプリケーションは原子力発電所を制御するためのものではありません。クラッシュしたとしても、それほど大きな問題ではありませんが、UIに関連するランダムな例外は、それが使用される状況では問題になります。プラグインアーキテクチャを使用しており、他の人(その場合は学生もいるため、完全にエラーのないコードを記述できる経験豊富な開発者はいない)によって拡張される可能性があるため、いくつかあります(おそらくまだあります)。 キャッチされる例外については、完全なスタックトレースを含めて、ログファイルに記録します。それがその演習の要点でした。文字通り、VBのOERNに私の類推をしている人々に対抗するためだけに。 特定のクラスのエラーを盲目的に無視することは危険であり、アプリケーションインスタンスを破損する可能性があることを知っています。前述のように、このプログラムは誰にとってもミッションクリティカルではありません。彼らの正しい心の中の誰もがその上に人間の文明の生存を賭けないでしょう。これは、特定の設計アプローチをwrtでテストするための単なる小さなツールです。ソフトウェア工学。 アプリケーションをすぐに使用する場合、例外で発生する可能性のあることは多くありません。 例外処理なし–エラーダイアログとアプリケーションは終了します。実験は繰り返される必要がありますが、別の主題で可能性があります。エラーはログに記録されていませんが、残念です。 一般的な例外処理–害のない無害なエラーがトラップされます。これは、開発中に発生したすべてのエラーから判断される一般的なケースです。この種のエラーを無視しても、直接的な影響はありません。コアデータ構造は十分にテストされているため、簡単にこれに耐えることができます。 一般的な例外処理–重大なエラーがトラップされました。後でクラッシュする可能性があります。これはまれに発生する可能性があります。今まで見たことがありません。エラーはとにかく記録され、クラッシュは避けられないかもしれません。したがって、これは概念的には最初のケースと同様です。スタックトレースがあることを除いて。そして、ほとんどの場合、ユーザーは気付くことさえありません。 プログラムによって生成された実験データについて:深刻なエラーは最悪の場合、データが記録されないだけです。実験の結果をほんの少しだけ変えるような微妙な変更は、ほとんどあり得ません。その場合でも、結果が疑わしいと思われる場合は、エラーがログに記録されます。完全な外れ値である場合でも、そのデータポイントを破棄できます。 要約すると、はい、私自身は少なくとも部分的には正気であると考えています。また、プログラムを実行したままにするグローバル例外処理ルーチンは必ずしも完全に悪であるとは考えていません。前に2回言ったように、アプリケーションによっては、このような決定が有効な場合があります。この場合、それは有効な決定であると判断され、合計ではなく、でたらめです。他のアプリケーションでは、決定が異なる場合があります。しかし、私たちまたはエラーを無視しているという理由だけで、世界を爆破する可能性があるそのプロジェクトに取り組んだ他の人々を非難しないでください。 補足:そのアプリケーションのユーザーは1人だけです。WindowsやOfficeのように何百万人もが使用しているものではなく、例外をユーザーにバブルさせるコストは、そもそも非常に異なっています。


12
Tryブロックで値を返すと、Finallyステートメントのコードが起動しますか?
私は友人のコードをレビューしていて、彼がtry-finallyブロック内でreturnステートメントを使用していたと言います。最後のセクションのコードは、tryブロックの残りの部分が実行されなくても実行されますか? 例: public bool someMethod() { try { return true; throw new Exception("test"); // doesn't seem to get executed } finally { //code in question } }


15
Pythonの呼び出し側スレッドでスレッドの例外をキャッチする
私はPythonとマルチスレッドプログラミング全般に非常に慣れていません。基本的に、ファイルを別の場所にコピーするスクリプトがあります。これを別のスレッドに配置し....て、出力がスクリプトがまだ実行中であることを示すことができるようにしたいと思います。 私が抱えている問題は、ファイルをコピーできない場合に例外がスローされることです。これは、メインスレッドで実行している場合は問題ありません。ただし、次のコードを使用しても機能しません。 try: threadClass = TheThread(param1, param2, etc.) threadClass.start() ##### **Exception takes place here** except: print "Caught an exception" スレッドクラス自体で、例外を再スローしようとしましたが、機能しません。ここにいる人々が同様の質問をするのを見てきましたが、彼らはすべて私がやろうとしていることよりも具体的なことをしているようです(そして私は提供されるソリューションを完全に理解していません)。私は人々がの使用法について言及するのを見ましたsys.exc_info()が、それをどこでどのように使用するかわかりません。 すべての助けに大歓迎です! 編集:スレッドクラスのコードは以下のとおりです。 class TheThread(threading.Thread): def __init__(self, sourceFolder, destFolder): threading.Thread.__init__(self) self.sourceFolder = sourceFolder self.destFolder = destFolder def run(self): try: shul.copytree(self.sourceFolder, self.destFolder) except: raise

7
Exception.MessageとException.ToString()
ロギングするコードがありException.Messageます。しかし、私はを使用する方が良いと述べている記事を読みましたException.ToString()。後者では、エラーに関するより重要な情報を保持できます。 これは本当Exception.Messageですか?そして先に進んですべてのコードロギングを置き換えることは安全ですか? また、log4netにはXMLベースのレイアウトを使用しています。Exception.ToString()問題の原因となる無効なXML文字が含まれている可能性はありますか?

15
C ++は例外時にスタックトレースを表示します
例外がスローされた場合にスタックトレースをユーザーに報告する方法が必要です。これを行う最良の方法は何ですか?大量の追加コードが必要ですか? 質問に答えるには: できれば持ち運びできるようにしたいです。情報をポップアップ表示したいので、エラーが発生した場合、ユーザーはスタックトレースをコピーしてメールで送信できます。

25
どのように再試行キャッチを実装しますか?
try-catchは、例外処理を支援することを目的としています。これは、どういうわけか、システムをより堅牢にするのに役立つことを意味します。予期しないイベントからの回復を試みてください。 実行および命令(メッセージの送信)の際に何かが発生する可能性があるため、tryに含まれています。ほぼ予期しないことが発生した場合は、何かを行うことができます。例外をログに記録するためだけに呼び出されたとは思わない。キャッチブロックは、エラーから回復する機会を提供することを目的としています。 ここで、問題点を修正できるため、エラーから回復するとします。再試行するのはとても良いことです: try{ some_instruction(); } catch (NearlyUnexpectedException e){ fix_the_problem(); retry; } これはすぐに永遠のループに入りますが、fix_the_problemがtrueを返したとしたら、再試行します。Javaにはそのようなことはないので、この問題をどのように解決しますか?これを解決するための最良の設計コードは何ですか? これは哲学的な質問のようなものです。私が求めていることがJavaで直接サポートされていないことがすでにわかっているからです。

15
例外処理にtry catchを使用することがベストプラクティスです。
上級開発者であると主張する誰かからの私の同僚のコードを維持しながら、私はしばしば次のコードを見る: try { //do something } catch { //Do nothing } または時々彼らは次のtry catchブロックのようなログファイルにログ情報を書き込みます try { //do some work } catch(Exception exception) { WriteException2LogFile(exception); } 彼らがやったことがベストプラクティスなのかと思っているだけです。私の考えでは、ユーザーがシステムで何が起こるかを知っている必要があるので、それは私を混乱させます。 アドバイスをください。

25
ループと関数をサポートする言語で「goto」を使用することの利点はありますか?もしそうなら、なぜですか?
私は長い間goto、可能であれば使用すべきではないという印象を受けてきました。先日、libavcodec(Cで書かれています)を調べていると、複数の使い方があることに気付きました。gotoループと関数をサポートする言語で使用することが有利になることはありますか?もしそうなら、なぜですか?

20
なぜ{…}やっと{…}が良いのでしょうか。{…}キャッチ{}してみませんか?
引数なしでキャッチを使用することは、特にそのキャッチが何もしない場合は、悪い形だと人々が言うのを見てきました。 StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } catch // No args, so it will catch any exception {} reader.Close(); ただし、これは適切な形式と見なされます。 StreamReader reader=new StreamReader("myfile.txt"); try { int i = 5 / 0; } finally // Will execute despite any exception { reader.Close(); } 私が知る限りでは、クリーンアップコードをfinallyブロックに配置することと、try..catchブロックの後にクリーンアップコードを配置することの唯一の違いは、tryブロックにreturnステートメントがある場合です(その場合、finallyのクリーンアップコードは実行されますが、try..catchの後のコードは実行されません)。 そうでなければ、最後に何がそれほど特別なのですか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.