タグ付けされた質問 「exceptions」

例外は、プログラムの通常のフローからの逸脱を必要とするアプリケーションプロセスでの発生です。

5
複雑なソフトウェアはどの程度の冗長性/堅牢性を実装する必要がありますか?
この質問の焦点:一部のソフトウェアは「余分な作業」を実行して、ソフトウェア内の1つまたは複数の内部エラーにもかかわらず「最終的に成功/満足」の結果を得る機会を増やします。結果が成功した場合、これらはすべてユーザーの知らないうちに発生します。 複雑なソフトウェアの定義: 存続期間中に10人以上の開発者によって作成(提供)されたコードが含まれており、同じ時間枠で記述されていない それぞれに注意事項がある10以上の外部ライブラリに依存 典型的なソフトウェアタスク(ユーザーが望む結果を生成するため)には10個以上の入力パラメーターが必要です。それらのほとんどはデフォルト値を持ちますが、ユーザーが制御を必要とする場合は構成可能です。 最も重要なことは、実行されるタスクに関連して適切な複雑さを持つソフトウェア、つまり不必要に複雑にならないソフトウェアです。 編集:複雑なものは何ですか?ComplexとComplicatedには大きな違いがあります。をご覧ください。(直接リンク) この質問内の冗長性/堅牢性の定義:(コメントに基づいて堅牢性を追加) 現在のパラメーターセットを使用したときにソフトウェアタスクが失敗した場合は、別のパラメーターを試してください。 明らかに、これらの「異なる」パラメータは異なるコードパスを使用し、結果として異なる(できればより良い)結果をもたらす可能性があるという内部知識が必要です。 これらの異なるコードパスは、外部ライブラリの観察に基づいて選択される場合があります。 最後に、実行される実際のタスクがユーザーの仕様とわずかに異なる場合、ユーザーは不一致の詳細を示すレポートを受け取ります。 最後に、10以上の構成可能なパラメーターと同様に、冗長性とレポートも構成可能です。 そのようなソフトウェアの例: データベース移行 ビジネスデータベース ソース管理データベースなど Word文書とOpenOffice文書、PowerPointおよびOpenOffice Drawなどの間のバッチ変換 ウェブサイト全体の自動翻訳 Doxygenなどのソフトウェアパッケージの自動分析。ただし、分析をより信頼性の高いものにする必要がある場合(つまり、単なるドキュメンテーションツールではない) パケットが失われる可能性があり、多くの再試行が予想されるネットワーク通信 この質問はもともと、意図的に悪いコードにどのように対処しますか?しかし、現在はソフトウェアの肥大化の原因の1つに焦点を当てています。この質問は、新機能の追加など、ソフトウェアの膨張のその他の原因には対応していません。 おそらく関連する: (巨大な)プロジェクトで複雑なコードを処理する方法 人々はどのようにして非常に複雑で読みにくいコードを書いて維持するのですか?

3
例外またはエラーコード
(主に)ネイティブクライアント(Windows、C ++)と通信するWebサービス(SOAP、.Net)を構築しており、クライアントにエラーを伝える最良の方法は何かを考えています(例:ログインサービスが利用できないSomethingBadHappenedまたはユーザーが見つからないなど)、クライアントに例外をスローするか、上記を行うために何らかのエラーコードモデルを使用するかを決定できませんでした。 クライアント側の処理であなたが好むもの:エラーコードを受け取るか、エラーの理由を含むServerFault例外を処理しますか? 1)なぜ例外を考えているのか:サーバー側のコードをより均一にするから 2)エラーコードを考えているのはなぜか:クライアント側の観点からより理にかなっていると考えるから 2)が本当に当てはまる場合、例外よりもエラーコードを探したいのでしょうか?それはここですか? また、ネイティブクライアントではなくマネージドクライアントと通信している場合、答えは変わりますか?

5
例外を設計する方法
私は非常に簡単な質問に苦労しています: 現在、サーバーアプリケーションで作業しています。例外の階層を作成する必要があります(一部の例外は既に存在しますが、一般的なフレームワークが必要です)。どうすればこれを開始できますか? 私はこの戦略に従うことを考えています: 1)何が問題なのでしょうか? 何かが求められますが、これは許可されていません。 何らかの質問があり、許可されていますが、パラメーターが間違っているため機能しません。 何らかの質問があり、許可されていますが、内部エラーのために機能しません。 2)リクエストを開始しているのは誰ですか? クライアントアプリケーション 別のサーバーアプリケーション 3)メッセージ処理:サーバーアプリケーションを扱っているので、メッセージの送受信がすべてです。それでは、メッセージの送信がうまくいかない場合はどうでしょうか? そのため、次の例外タイプが発生する場合があります。 ServerNotAllowedException ClientNotAllowedException ServerParameterException ClientParameterException InternalException(サーバーがリクエストの送信元を知らない場合) ServerInternalException ClientInternalException MessageHandlingException これは例外階層を定義するための非常に一般的なアプローチですが、いくつかの明らかなケースが欠けているのではないかと心配しています。私がカバーしていない分野についてのアイデアがありますか、この方法の欠点を知っていますか、この種の質問に対するより一般的なアプローチがありますか(後者の場合、どこで見つけることができますか)? 前もって感謝します
11 design  c++  exceptions  stl 


5
Javaアプリケーションでランタイム例外をスローする
私は請負業者として、テクニカルリードの役割でクライアント用のエンタープライズJavaアプリケーションを設計しています。このアプリケーションはエンドユーザーによって使用され、退社時にアプリケーションをサポートするサポートチームが存在します。 私が一緒に作業している他のテクニカルリードは、例外処理によってコードがダーティになるという印象を受けています。システムはチェックされていない例外を処理する必要がないように、チェックされた例外をサービス層からのみスローし、残りのコードは他のすべての層からランタイム例外をスローする必要があります。 ビジネスアプリケーションで未チェックの例外をスローする必要はありますか? ランタイム例外に関する過去の私の経験から: 1)チェックされていない例外は、Javadocにも表示されないため、コードを予測不能にします。 2)ビジネスアプリケーションで未チェックの例外をスローするのは意味がありません。スローしてユーザーの顔にまっすぐに進むと、どのようにユーザーに説明するのですか?500 -Internal Error. Contact Administratorエンドユーザーにとっても、アプリケーションを管理するサポートチームにとっても何の意味もないことを示すWebアプリケーションを十分に見てきました。 3)ランタイム例外をスローすると、例外をスローするクラスのユーザーはソースコードを調べてデバッグし、例外がスローされた理由を確認することが強制されます。これは、実行時例外のJavadocが偶然見事に文書化されている場合にのみ回避できますが、これは決して事実ではありません。

10
セキュリティ制限により、サービスがnullを返すか、例外をスローする必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 私はこの問題に関して、より経験豊富な開発者と少し意見の相違があり、他の人がそれについてどう思うか疑問に思っています。私たちの環境は、Java、EJB 3、サービスなどです。 私が書いたコードは、物を取得して物を作成するサービスを呼び出します。私が遭遇した問題は、意味をなさないヌルポインタ例外を受け取ったことです。たとえば、サービスにオブジェクトの作成を依頼すると、nullが返されます。既知の有効なIDを持つオブジェクトを検索しようとすると、nullが返されます。私は自分のコードで何が間違っていたのかを理解しようといくつかの時間を費やしました。私は経験が少ないので、私は通常、何か間違ったことをしたと思いますが、nullリターンの理由はセキュリティであることがわかります。私のサービスを使用しているユーザープリンシパルがターゲットサービスに対する適切なアクセス許可を持っていなかった場合、単にnullを返します。ここにある他のほとんどのサービスもあまり文書化されていないので、明らかにこれはあなたが知っておくべきことです。 これは、サービスと対話するコードを作成する開発者としてはかなり混乱します。サービスに例外があり、ユーザーにこの物をロードしたり、物を作成したりするための適切なアクセス許可がないことを教えてくれるなら、それは私にとってはるかに理にかなっています。そうすると、サービスが期待どおりに機能しなかった理由がすぐにわかります。 サービスを書いた経験豊富な開発者は、データの要求はエラー状態ではなく、例外はエラー状態でのみスローされるべきであり、ユーザーがデータにアクセスできないときではないと主張しました。このデータは多くの場合GUIで検索され、適切な権限のないユーザーの場合、これらは単に「存在しません」。要するに、質問は間違っていないため、例外ではありません。これらのユーザーには「存在しない」ものがあるため、getメソッドはnullを返します。ユーザーがそのモノを作成することを許可されなかった場合、Createメソッドはnullを返します。 これは正常なものですか?何が起こっているのかを知るのがずっと簡単だと思うので、例外を使うことを好みます。そのため、たとえば、nullを返すのではなく、無効なIDを持つオブジェクトを要求した場合にNotFoundExceptionをスローすることも好みます。

5
コードでランタイム例外を処理することは良い習慣ではありませんか?
私はJavaアプリケーションで作業していますが、実行時例外は多くの場所で処理されることがわかります。例えば、 try { // do something } catch(NullPointerException e) { return null; } 私の質問は、いつランタイム例外を処理するのが良い習慣ですか?例外を未処理のままにする必要があるのはいつですか?
11 java  exceptions 

2
並列プログラムでエラーを処理する最良の方法は何でしょうか?
並列アルゴリズムがドアをノックしているので、エラー処理について考える良い機会かもしれません。 そのため、最初はエラーコードがありました。吸いました。それらを無視するのは自由だったので、遅れて失敗してデバッグしにくいコードを生成することができました。 その後、例外が発生しました。それらは一度発生すると無視できなくなり、ほとんどの人(Joelを除く)は彼らを好むようになりました。 そして今、並列コードを支援するライブラリが手に入りました。問題は、非並列コードの場合ほど簡単に並列コードの例外を処理できないことです。タスクを非同期で起動し、例外をスローした場合、そのタスクを過ぎてアンワインドするスタックトレースはありません。できるのは、そのようなオブジェクトがある場合、それをキャプチャしてタスクオブジェクトに登録することです。ただし、例外の主な強みは無効になります:それらを確認する必要があり、追加の労力なしで無視できますが、シングルスレッドコードでは例外は適切なアクションを必ずトリガーします(プログラムを終了することを意味する場合でも)。 言語実装またはライブラリは、並列コードのエラーをどのようにサポートする必要がありますか?

3
コードで抑制警告を使用することは良い習慣ですか?
私は@SuppressWarnings("unchecked")、@SuppressWarnings("null")ほとんどの場合上記の方法を使用して、警告なしでコードをコンパイルできるようにしていますが、疑問があります。このStackoverflowの質問が見つかりました。ジョン・スキートが興味深い答えを書いてくれました。 彼によると、 時々、Javaジェネリックスはあなたがやりたいことをさせないだけで、あなたがしていることが本当に実行時に合法であることをコンパイラに効果的に伝える必要があります。 しかし、例外がスローされる可能性がある場合はどうでしょうか?警告を抑制するのは悪い考えではありませんか?問題が表面化する可能性のある場所を意識する必要はありませんか? また、誰かが後で私のコードを変更し、SuppressWarningsを削除せずに疑わしい機能を追加した場合はどうなりますか?それをどのように回避できますか、および/またはこれに他の代替手段はありますか? 私が使用してしなければならない@SuppressWarnings("unchecked")と@SuppressWarnings("null")? アップデート#1 未チェックの型キャストに関する限り、この回答(以下のコメントで@gnatが指摘)によると、これらの警告を抑制することが必要です。 安全でない型キャストの必要性を排除するために、多くの不可欠なJavaライブラリが更新されたことはありません。これらの警告を抑制することは、他のより重要な警告に気づき修正するために必要です。 他の警告を抑制する場合は、まだ少し灰色の領域にあります。 アップデート#2 あたりとして、Oracleのドキュメント(以下もいくつかの回答で述べました): スタイルの問題として、プログラマーは常に、このアノテーションが最も効果的な場所で最も深くネストされた要素に使用する必要があります。特定のメソッドで警告を抑制したい場合は、クラスではなくそのメソッドに注釈を付ける必要があります。

2
Oracle Javaチュートリアルで、チェックされた例外とチェックされていない例外が「論争」と呼ばれるのはなぜですか?
私はJavaが初めてで、例外に関するドキュメントを読んでいました。、特にチェックされていない例外—論争のページ。 一番下の行は言う: クライアントが例外からの回復が合理的に期待できる場合は、チェック済み例外にします。クライアントが例外から回復するために何もできない場合は、チェックされていない例外にします。 記事がわかりません。「論争」とは何ですか?簡単な言葉で説明できますか?

1
Pythonで例外をサブクラス化する必要があるのはいつですか?
私のコードでは、例外を発生させる場所が約7箇所あります。これらの例外はすべて同じように扱われます。エラーをログファイルに出力し、ソフトウェアの状態をデフォルトに戻して終了します。 コードのレビュー中に、私が高く評価している上級エンジニアは、これらの例外をすべてサブクラス化する必要があると述べました。彼の主張は、将来的には例外を別の方法で処理したいと思うかもしれず、それはより簡単になるでしょう。 私の主張は、現時点ではコードが雑然としているだけであり、例外を別の方法で処理するかどうかがわからないため、コードを簡潔にしておきます。 。 いずれの場合も議論はありますか。

2
JVMはmainメソッドによってスローされた例外をどのように処理しますか?
私は例外を理解し、それらをスローし、それらを処理し、それらをコールスタックの下位のメソッド(つまりthrows)に伝達します。 私が理解していないのはこれです: public static void main(String[] args) throws Exception { ... } 今、私はをmainスローする場合Exceptionに、JVMがそれを処理すると仮定します(正しい?)。その場合、私の質問は次のとおりです。 JVMはスローされた例外をどのように処理しmainますか?それは何をするためのものか?
10 java  exceptions  jvm 

5
アサートまたはエラーとしての例外?
私はプロのCプログラマーであり、趣味のObj-Cプログラマー(OS X)です。最近、その非常に豊富な構文のために、C ++に拡張するように誘惑されました。 これまでのコーディングでは、例外をあまり扱っていません。Objective-Cにはそれらがありますが、Appleのポリシーは非常に厳格です。 重要プログラミングまたは予期しないランタイムエラー(範囲外のコレクションアクセス、不変オブジェクトの変更の試行、無効なメッセージの送信、ウィンドウサーバーへの接続の喪失など)の例外の使用を予約する必要があります。 C ++は例外をより頻繁に使用することを好むようです。たとえば、RAIIのウィキペディアの例では、ファイルを開くことができない場合に例外がスローされます。Objective-Cはreturn nil、outパラメータによってエラーが送信されます。特に、std :: ofstreamはどちらの方法でも設定できるようです。 ここで、プログラマーに対して、エラーコードの代わりに例外を使用することを宣言するか、例外をまったく使用しないことを宣言するいくつかの答えを見つけました。前者の方が一般的です。 C ++の客観的な研究をしている人は見つかりませんでした。ポインタはまれであるため、例外を回避することを選択した場合は、内部エラーフラグを使用する必要があります。それは扱いが面倒すぎますか、それとも例外よりもうまく機能しますか?両方のケースを比較するのが最良の答えです。 編集:完全に関連しているわけではありませんが、私はおそらく何nilが何であるかを明確にする必要があります。技術的にはと同じNULLですが、メッセージをに送信しても問題ありませんnil。だからあなたは次のようなことができます NSError *err = nil; id obj = [NSFileHandle fileHandleForReadingFromURL:myurl error:&err]; [obj retain]; 最初の呼び出しが返されたとしてもnil。また*obj、Obj-Cでは絶対にしないので、NULLポインターの逆参照のリスクはありません。
10 c++  exceptions 

5
同じ関数/メソッドでの例外のスローとキャッチ
ユーザーが正の整数(自然数)を入力するまで、ユーザーに入力を求める関数を作成しました。誰かが、関数で例外をスローしてキャッチしてはならず、関数の呼び出し元に例外を処理させるべきだと誰かが言った。 他の開発者はこれについてどう思いますか。また、おそらく関数の例外を誤用しています。Javaのコードは次のとおりです。 private static int sideInput() { int side = 0; String input; Scanner scanner = new Scanner(System.in); do { System.out.print("Side length: "); input = scanner.nextLine(); try { side = Integer.parseInt(input); if (side <= 0) { // probably a misuse of exceptions throw new NumberFormatException(); } } catch (NumberFormatException numFormExc) …
10 exceptions 

5
チェック済みvsチェックなしvs例外なし…反対の信念のベストプラクティス
システムが例外を適切に伝達および処理するために必要な多くの要件があります。概念を実装するために言語を選択するための多くのオプションもあります。 例外の要件(順不同): ドキュメント:言語には、APIがスローできる例外をドキュメント化する手段が必要です。理想的には、このドキュメントメディアは、コンパイラとIDEがプログラマにサポートを提供できるようにマシンで使用できる必要があります。 例外的な状況の送信:これは明らかです。呼び出された機能が期待されるアクションを実行できない状況を関数が伝達できるようにするためです。私の意見では、そのような状況には3つの大きなカテゴリがあります。 2.1一部のデータが無効になる原因となるコードのバグ。 2.2構成またはその他の外部リソースの問題。 2.3本質的に信頼できないリソース(ネットワーク、ファイルシステム、データベース、エンドユーザーなど)。これらは信頼できない性質のため、散発的な障害が発生する可能性があるため、ちょっとしたケースです。この場合、これらの状況は例外的と見なされますか? コードがそれを処理するための十分な情報を提供する:例外は、呼び出し先に対応し、状況を処理できるように、十分な情報を呼び出し先に提供する必要があります。ログに記録されたときに、この例外がプログラマーに問題のあるステートメントを識別して分離し、解決策を提供するのに十分なコンテキストを提供できるように、情報も十分でなければなりません。 プログラマーにコードの実行状態の現在のステータスについて自信を与える:ソフトウェアシステムの例外処理機能は、プログラマーの邪魔にならないようにしながら必要な安全策を提供するために十分に存在している必要があります。手。 これらをカバーするために、以下のメソッドがさまざまな言語で実装されました。 チェックされた例外は例外 を文書化する優れた方法を提供し、理論的には正しく実装された場合、すべてが良好であることを十分に保証するはずです。ただし、コストがかかるため、多くの場合、例外を飲み込むか、チェックされていない例外として再スローすることで単にバイパスする方が生産性が高くなります。不適切にチェックされた例外を使用すると、ほとんどすべての有用性が失われます。また、チェックされた例外は、時間的に安定したAPIの作成を困難にします。特定のドメイン内で汎用システムを実装すると、チェックされた例外のみを使用して維持することが困難になる例外的な状況が大量に発生します。 チェックされていない例外 - チェックされた例外よりもはるかに用途が広く、特定の実装で起こり得る例外的な状況を適切に文書化できません。彼らは、仮にあったとしてもその場限りの文書に依存しています。これにより、メディアの信頼できない性質が、信頼性のある外観を提供するAPIによってマスクされます。また、これらの例外がスローされると、抽象化レイヤーを逆方向に移動するときに意味が失われます。それらは十分に文書化されていないため、プログラマーはそれらを明確に対象とすることができず、セカンダリシステムで障害が発生した場合にシステム全体を停止させないために、必要以上に広いネットをキャストする必要があります。これにより、提供された嚥下問題チェック例外に戻ることができます。 マルチステートの戻り値の型 ここでは、予想外の結果または例外を表すオブジェクトを返すために、ばらばらのセット、タプル、またはその他の同様の概念に依存しています。ここでは、スタックの巻き戻し、コードのカットは行われません。すべてが正常に実行されますが、続行する前に戻り値のエラーを検証する必要があります。私はまだこれを実際に使用していませんので、経験からコメントすることはできません。通常のフローをバイパスしていくつかの問題の例外を解決しますが、チェックされた例外とほとんど同じ問題があり、面倒で常に「直面しています」。 だから問題は: この問題についてのあなたの経験は何ですか、そしてあなたによると、言語が持つ優れた例外処理システムを作るための最良の候補は何ですか? 編集:この質問を書いてから数分後、私はこの投稿に出くわしました、不気味です!

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