問題タブ [exception-handling]
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.
wpf - WPF - DispatcherUnhandledException が機能していないようです
VS2008 で新しい WPF プロジェクトを開始し、trap にコードを追加しましたDispatcherUnhandledException
。次に、スロー例外を追加しましたWindow1
が、エラーはハンドラーによってトラップされません。なんで?
c# - .net でのデータベース例外の処理
次のような例外をキャッチできる場合: Violation of UNIQUE KEY constraint 'IX_Product'. Cannot insert duplicate key in object 'Product'. (2627)
.
課題は、インデックス名 IX_Product をメンバーとして解読する方法です (つまり、メッセージを部分文字列にしたくありません)。テーブルには複数の一意の制約が存在する可能性があり、より詳細な情報をユーザーに提供するためにどれを知る必要があります。SQL Server 固有ではないため、DbException としてキャッチすることをお勧めします。文字列を解析せずに例外から影響を受けるインデックスを取得する方法はありますか?
私が思いついた唯一の解決策は、ストアド プロシージャを使用してそこにエラーをトラップし、ストアド プロシージャからより詳細なメッセージを返すことです。しかし、これにはまだ問題があると思います。
database - コード内の DB 制約をチェックする必要がありますか、それとも DB によってスローされた例外をキャッチする必要がありますか
Jobs というテーブルにデータを保存するアプリケーションがあります。Jobs テーブルには、UNIQUE 制約を持つ Name という列があります。Name 列は PRIMARY KEY ではありません。新しいエントリを保存/更新する前に自分でエントリの重複をチェックする必要があるのか 、それともデータアクセスレイヤーによってスローされる例外を待つ方がよいのか疑問に思います. 重要な場合は、このアプリにNHibernateを使用しています
すばらしいインプットをしてくれたみんなに感謝します。
例外がスローされる (そしてコードによってキャッチされる) のを待つのではなく、コードで検証する必要があるもう 1 つの理由を見つけました。この場合、NHibernate は NHibernate.Exceptions.GenericADOException のみをスローするようです。これは、この場合の例外の原因に関してあまり有益ではありません。それとも、ここでNHibernateの側面が欠けていますか?
.net - Microsoftの例外処理ブロック-オーバーエンジニアリングの完璧な例ではありませんか?
マイクロソフトがアプリケーションブロックを導入して以来、私は例外処理アプリケーションブロックを使用する人々にぶつかっています。私は最近自分自身を詳しく調べて、基本的な機能を次のように要約します(それが何をするかをすでに知っている場合は、次のブロックをスキップしてください):
例外処理アプリケーションブロックは、次の主要な例外処理タスクを一元化し、構成ファイルで完全に構成可能にすることを目的としています。
- 例外のログ記録
- 例外の置き換え
- 例外のラッピング
- 例外の伝播
- 等
ライブラリは、trycatchブロックを次のように変更することでこれを行います。
ポリシー名のapp.configで指定されている内容(ドキュメントについてはこちらを参照)に基づいて、HandleExceptionは...
- 完全に新しい例外をスローします(元の例外を置き換えます)
- 元の例外を新しい例外でラップし、それをスローします
- 例外を飲み込む(つまり何もしない)
- 元の例外を再スローしますか
さらに、事前にさらに多くのことを実行するように構成することもできます(たとえば、例外をログに記録します)。
ここに私の問題があります。例外が置き換えられるか、ラップされるか、飲み込まれるか、または再スローされるかにかかわらず、構成可能にすることがどのように有益であるかを完全に理解できません。私の経験では、例外処理の動作を変更するときに周囲のコードまたは呼び出し元のコードを変更する必要があるため、この決定はコードを作成するときに行う必要があります。
たとえば、特定のポイントでスローされた特定の例外が再スローされるのではなく飲み込まれるように再構成すると、コードが正しく動作しなくなる可能性があります(catchブロックの後に、例外が発生したときに実行してはならないコードがある場合があります)。例外処理で考えられる他のすべての変更についても同じことが言えます(たとえば、replace-> rethrow、swallow-> wrap)。
したがって、私にとって重要なのは、例外処理ブロックが実際には存在しない問題を解決するということです。例外のロギングと通知ビットは問題ありませんが、他のすべてのものはオーバーエンジニアリングの完璧な例ではありませんか?
python - MainLoop 例外をキャッチして MessageDialogs に表示する
外部構成ファイルに依存する wxPython アプリケーションがあります。構成エラーがある場合に表示されるわかりやすいメッセージ ダイアログを提供したいと考えています。app.MainLoop() 呼び出しを try/except ステートメントでラップすることで、これを機能させようとしました。
以下のコードは、私の MainWindow フレーム クラスの init コードに対して機能しますが、MainLoop 内で発生する例外をキャッチしません。これらの例外をキャッチするにはどうすればよいですか?
wx.App クラスでオーバーライドできる OnExceptionInMainLoop メソッドについての言及を読んだことがありますが、wx.App にはその名前のメソッドがないように見えるため、読んだソースは古くなっている (2004 年) に違いありません。
編集:
メインループ中に未処理の例外をキャッチできるようにする必要があります。これにより、それらをさらに処理してエラー ダイアログに表示し、黙って渡したり、アプリを終了したりできなくなります。
sys.excepthook ソリューションはレベルが低すぎて、wxPython のメインループ スレッドでは適切に機能しません。他の回答へのリンクは同じ try/except を実行しますが、メインループをラップすることは機能しませんが、これは wxPython が app/ui の別のスレッドを生成するためです。
.net - NotImplementedException が存在するのはなぜですか?
これは本当に、本当に私を悩ませているので、誰かがなぜ物事がそのままであるかについて合理的な正当化をしてくれることを願っています.
NotImplementedException. あなたは私の足を引っ張っていますよね?
いいえ、「ちょっと待ってください。メソッドが実装されているので、NotImplementedException がスローされます」と安易に言うつもりはありません。はい、そうです。NotImplementedException をスローするメソッドを実装する必要があります (C++ での純粋な仮想関数呼び出しとは異なります。これは理にかなっています!)。それはかなりおかしな話ですが、私の心にはもっと深刻な問題があります。
NotImplementedException が存在する場合、どうすれば .Net で何かできるのでしょうか? 実装されていない可能性のあるメソッドから保護するために、すべての抽象メソッド呼び出しを try catch ブロックでラップする必要がありますか? そのような例外をキャッチした場合、一体どうすればよいのでしょうか??
メソッドを呼び出さずに実際に実装されているかどうかをテストする方法がわかりません。それを呼び出すと副作用が生じる可能性があるため、事前にすべてのチェックを行ってからアルゴリズムを実行することはできません。アルゴリズムを実行し、NotImplementedExceptions をキャッチして、アプリケーションを正常な状態にロールバックする必要があります。
それはクレイジーです。狂った。非常識。問題は 、なぜ NotImplementedException が存在するのかということです。
先制攻撃として、「設計者はこれを自動生成コードに入れる必要があるため」と答えてほしくありません。これは恐ろしいです。実装を提供するまで、自動生成されたコードをコンパイルしないでください。たとえば、自動生成された実装は「throw NotImplementedException;」のようになります。NotImplementedException は定義されていません。
NotImplementedException をキャッチして処理したことのある人はいますか? コードに NotImplementedException を残したことがありますか? もしそうなら、これは時限爆弾 (つまり、誤ってそこに置き忘れた) または設計上の欠陥 (メソッドは実装されるべきではなく、決して呼び出されない) を表していますか?
NotSupportedException も非常に疑わしいです... サポートされていませんか? 何?サポートされていない場合、それがインターフェイスの一部になっているのはなぜですか? マイクロソフトの誰かが不適切な継承を綴ることができますか? しかし、この質問に対してあまり虐待を受けなければ、別の質問を始めるかもしれません.
追加情報:
これは、この主題に関する興味深い読み物です。
「NotImplementedException は、まだ実装されていないが、実際には実装されるべき (そして実装される予定) の機能のためのものである」という Brad Abrams との強い合意があるようです。そこに NotImplementedException をスローし、実際のコードでそれらをフラッシュします…」
Jared Parsonsからのコメントは非常に脆弱であり、おそらく無視する必要があります: NotImplementedException: 型が何らかの理由でメソッドを実装しない場合、この例外をスローします。
MSDNはこの件に関してさらに弱く、「要求されたメソッドまたは操作が実装されていない場合にスローされる例外」とだけ述べています。
exception - ドメイン クラスで例外に対してアサーションを使用する場合
ドメインクラス内で例外処理の代わりにアサーションを使用する状況はありますか...
exception - どちらの契約(設計による契約)が良いですか?
メソッドがあるとします
IDを指定してPatientオブジェクトを返します。2つの方法でコントラクトを定義できます
- 患者が存在しない場合、メソッドは null を返します
- 患者が存在しない場合、メソッドは例外をスローします。この場合、Patient がデータベースに存在する場合は true、そうでない場合は false を返すクエリ メソッドも定義します。
どの契約を使用すればよいですか? 他の提案はありますか?
更新: このケースについてもコメントしてください... ID が割り当てられたデータベースではなく、ユーザーが UI に入力したものである場合.. SSN のように.. どちらが優れているか..
私が有効だと思うSteveからのNullパターンについてのコメント: IDが存在しなかったときにすぐに知ることが本当に役立つので、おそらくここでは良い考えではありません.
また、ここのNullパターンはやや重いと思います
Id が悪いために例外をスローすることについての Rob Wells からのコメント: 患者の名前のタイプミスが例外的な状況であるとは思わない」
c# - try { return x; で実際に何が起こるか } 最後に { x = null; } 声明?
別の質問でこのヒントを見たのですが、これが一体どのように機能するのかを誰かが説明してくれるかどうか疑問に思っていました。
つまり、ステートメントの後finally
に句が本当に実行されるのでしょうか? このコードはどの程度スレッドセーフでないのでしょうか? このハックに関して実行できる追加のハッキングを考えられますか?return
try-finally