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

例外処理は、特別な処理を必要とする異常または例外的な状態の発生に対応するプロセスであり、プログラム実行の通常のフローを変更することがよくあります。

8
try-finally(catchなし)とenum-state検証の使用
私はこの質問について、例外が発生した場所にできるだけ近いところで例外を処理する方法についてのアドバイスを読んでいます。 ベストプラクティスのジレンマは、try / catch / finallyを使用してenum (または値を表すint、エラーの場合は0、OKの場合は1、警告の場合は2など)を返す必要があるかどうかです。答えは常に正しいですか、それとも呼び出し側がそれを処理するように例外を通過させるべきですか? 私が集めることができるものから、場合によってはこれが異なるかもしれないので、元のアドバイスは奇妙に思えます。 たとえば、Webサービスでは、常に状態を返す必要があるため、例外はその場で処理する必要がありますが、http経由でデータを投稿/取得する関数内で、例外(たとえば404の場合)は、それを起動したものにパススルーするだけです。そうでない場合は、結果の品質(エラー:404)と結果自体を呼び出し側に通知する方法を作成する必要があります。 データを取得/ポストするヘルパー関数内で404例外をキャッチすることは可能ですが、そうする必要がありますか?smallintを使用してプログラムの状態を示し(もちろん、それらを適切に文書化し)、この情報を外部の健全性検証の目的(すべてok /エラー処理)に使用するのは私だけですか? 更新:メインの分類で致命的または致命的でない例外を予期していましたが、回答を害しないようにこれを含めたくありませんでした。質問が何であるかを明確にしましょう:例外をスローするのではなく、スローされる例外を処理します。望ましい結果とは:エラーを検出し、エラーからの回復を試みます。復旧できない場合は、最も意味のあるフィードバックを提供してください。 ここでも、http get / postの例での問題は、元の呼び出し元に何が起こったかを説明する新しいオブジェクトを提供する必要があるかということです。このヘルパーが使用しているライブラリにあった場合、操作のステータスコードを提供することを期待しますか、それともtry-catchブロックに含めますか?設計している場合、ステータスコードを提供するか、例外をスローして、代わりに上位レベルにステータスコード/メッセージに変換させますか? あらすじ:例外を生成するのではなく、コードの一部がステータスコードと、コードが生成する結果を返す場合、どのように選択しましたか?

4
「例外のキャッチ」を使用して読みやすさを向上させる、良いか悪いか?
セクションで使用例外にする場合で実用的プログラマー、代わりのブックへの書き込み: retcode = OK; if (socket.read(name) != OK) { retcode = BAD_READ; } else { processName(name); if (socket.read(address) != OK) { retcode = BAD_READ; } else { processAddress(address); if (socket.read(telNo) != OK) { retcode = BAD_READ; } else { // etc, etc... } } } return retcode; 、 彼らは好む: retcode …

2
C#でカスタム例外を作成するタイミング
COMポートを介して単純なハードウェアデバイスとインターフェイスするクラスを作成しています。デバイスはさまざまなモードを使用するように構成できるため、私のクラスにはタイプSetOperatingModeを取り込む関数があります。次のようになります。enumUsbDeviceMode class UsbDevice { public void SetOperatingMode(UsbDeviceMode mode) { byte[] buffer = new byte[4]; buffer[0] = 0x5A; buffer[1] = 0x02; buffer[2] = (byte)mode; buffer[3] = 0x00; //IO_TYPE is always 0 in this case. _port.Write(buffer, 0, 4); int read = _port.Read(buffer, 0, 2); bool successfulSet = (read == 2 && buffer[0] …

2
破棄をスローする可能性のある値渡し引数による強力な例外安全性保証は可能ですか?
スローデストラクタを備えた型と、それを値で受け取る関数があるとします。 その操作は、基本的な例外保証よりも優れたものを提供できますか? または別の方法で定式化すると、操作にコミットアンドロールバックセマンティクスがあるかどうかを判断するときに、値によって渡された引数の破棄を無視できますか? #include <cstdlib> struct X { ~X() noexcept(0) { if(rand()%6 == 0) throw 0; } // some state }; void update(database db, X arg) noexcept; X x; update(db, x); 個人的には、ウィキペディアの定義に基づく 強力な例外安全性、コミットまたはロールバックセマンティクスとも呼ばれます:操作は失敗する可能性がありますが、失敗した操作には副作用がないことが保証されているため、すべてのデータは元の値を保持します 関数自体がスローすることさえできないとしてもupdate、強く例外セーフであると説明することは有用ではないと私は思います。 私は私の現在の理解の愚かさを私に示してくれる人、あるいはもっと良い議論をしてくれれば幸いです。

5
例外に関するチームのガイドラインはありますか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私のチームは最近、一部の作業をオフロードする必要があった開発者の数が非常に少なくなったチームからプロジェクトを継承しました。私たちが継承したプロジェクトの1つは、ネストされたコードが散らばったプロジェクトとひどい例外処理です(例外は実際にはgotoステートメントとして処理され、通常のプログラムフローの一部として使用されていました)。 全体として、それは誰かが数年間咳をしてきた毛深いコードボールでした。 現在、私たちはかなり長い間いくつかのチームガイドラインを用意していますが、オブジェクトの構造、コーディングスタイル、およびそうでないものに関するすべての考慮事項があります。ただし、例外処理については取り上げていません。 だから、例外処理に関してあなたのチームにガイドラインがあるかどうか、そしてもしそうならどのようにそれらを実施するのか?

3
例外が発生したときにクラスとメソッド名をログに記録することはセキュリティ上の欠陥ですか?
私は以下を持っています: public class doCheck(){ public void performCheck(){ try { perform all checks...... } catch(Exception e){ logger.error("Exception occured in class doCheck in method performCheck"); thrown new MyNewException(e.getMessage()); } } } クラスとメソッド名をログに記録しても安全ですか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.