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

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

5
コンソールアプリケーションの.NETグローバル例外ハンドラ
質問:コンソールアプリケーションで未処理の例外のグローバル例外ハンドラーを定義したいと思います。asp.netでは、global.asaxで定義でき、Windowsアプリケーション/ servicesでは、次のように定義できます。 AppDomain currentDomain = AppDomain.CurrentDomain; currentDomain.UnhandledException += new UnhandledExceptionEventHandler(MyExceptionHandler); しかし、コンソールアプリケーションのグローバル例外ハンドラを定義するにはどうすればよいですか? currentDomainが機能しないようです(.NET 2.0)? 編集: ああ、愚かな間違い。 VB.NETでは、currentDomainの前に「AddHandler」キーワードを追加する必要があります。そうしないと、IntelliSenseでUnhandledExceptionイベントが表示されません... これは、VB.NETとC#コンパイラがイベント処理を異なる方法で処理するためです。

1
Pythonの「レイズ」の使用法
違いは何だraiseとraise fromPythonでは? try: raise ValueError except Exception as e: raise IndexError これは Traceback (most recent call last): File "tmp.py", line 2, in <module> raise ValueError ValueError During handling of the above exception, another exception occurred: Traceback (most recent call last): File "tmp.py", line 4, in <module> raise IndexError IndexError そして …




20
空のキャッチブロックが悪い考えであるのはなぜですか?[閉まっている]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 4年前休業。 この質問を改善する 私はtry-catchに関する質問を見たことがあります。(Jon Skeetを含め)空のcatchブロックは本当に悪い考えだと言っていますか?なんでこれ?空のキャッチが間違った設計決定ではない状況はありませんか? たとえば、どこかから追加の情報(Webサービス、データベース)を取得したい場合があり、この情報を取得してもしなくてもかまいません。だからあなたはそれを取得しようとし、何かが起こっても大丈夫です、私は単に「キャッチ(例外は無視されました){}」を追加し、それですべてです

22
イベントログに書き込むときにSystem.Security.SecurityException
ASP.NETアプリをServer 2003(およびIIS6)からServer 2008(IIS7)に移植しようと取り組んでいます。 ブラウザでページにアクセスしようとすると、次のようになります。 「/」アプリケーションでのサーバーエラー。 セキュリティ例外 説明:アプリケーションが、セキュリティポリシーで許可されていない操作を実行しようとしました。このアプリケーションに必要な権限を付与するには、システム管理者に連絡するか、構成ファイルでアプリケーションの信頼レベルを変更してください。 例外の詳細:System.Security.SecurityException:ソースは見つかりませんでしたが、一部またはすべてのイベントログを検索できませんでした。アクセスできないログ:セキュリティ ソースエラー: 現在のWeb要求の実行中に、未処理の例外が生成されました。例外の発生源と場所に関する情報は、以下の例外スタックトレースを使用して識別できます。 スタックトレース: [SecurityException:ソースは見つかりませんでしたが、一部またはすべてのイベントログを検索できませんでした。アクセスできないログ:セキュリティ。] System.Diagnostics.EventLog.FindSourceRegistration(String source、String machineName、Boolean readOnly)+562 System.Diagnostics.EventLog.SourceExists(String source、String machineName)+251 [をちょきちょきと切る] これらは私がそれを試して解決するためにやったことです: 「Everyone」にキーへのフルアクセス許可を与えますHKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security。これはうまくいきました。しかし、当然、私は本番環境ではこれを行うことができません。そこで、アプリを数分間実行した後、「Everyone」権限を削除すると、エラーが再度表示されました。 昇格したアクセス許可でのインストール中に、アプリケーションログとセキュリティログにソースを作成し(regeditを介してソースが存在することを確認しました)、エラーは残りました。 私はアプリにweb.configファイルの完全な信頼レベルを(そしてを使用してappcmd.exe)与えましたが、役に立ちませんでした。 ここで何ができるかについて誰かが洞察を持っていますか? PS:これはこの質問のフォローアップです。私は与えられた答えに従いましたが、役に立ちませんでした(上記の#2を参照)。

10
Pythonでキャッチされなかった例外のロギング
どのようにキャッチされない例外をloggingモジュールではなくモジュール経由で出力させますstderrか? これを行う最良の方法は次のとおりです。 try: raise Exception, 'Throwing a boring exception' except Exception, e: logging.exception(e) しかし、私の状況はそれがになるようで本当にいい場合はlogging.exception(...)例外がキャッチされていないたびに自動的に呼び出されました。

10
Spring Boot RESTサービスの例外処理
大規模なRESTサービスサーバーをセットアップしようとしています。Spring Boot 1.2.1 Spring 4.1.5、およびJava 8を使用しています。コントローラーは@RestControllerと標準の@RequestMappingアノテーションを実装しています。 私の問題は、Spring Bootがコントローラー例外のデフォルトのリダイレクトをに設定することです/error。ドキュメントから: Spring Bootはデフォルトで/ errorマッピングを提供し、すべてのエラーを賢明な方法で処理し、サーブレットコンテナーに「グローバル」エラーページとして登録されます。 Node.jsを使用してRESTアプリケーションを何年も作成してきた私にとって、これは賢明ではありません。サービスエンドポイントが生成する例外は、応答で返す必要があります。AngularまたはJQuery SPAコンシューマーである可能性が最も高いものにリダイレクトを送信する理由を理解できません。このコンシューマーは、回答を探しているだけで、リダイレクトに対してアクションを実行できないか、実行できません。 私がやりたいことは、例外を受け取ることができるグローバルエラーハンドラーをセットアップすることです-リクエストマッピングメソッドから意図的にスローされるか、Springによって自動生成され(リクエストパスシグネチャのハンドラーメソッドが見つからない場合は404)、 MVCリダイレクトなしのクライアントへの標準形式のエラー応答(400、500、503、404)。具体的には、エラーを取得し、UUIDを使用してNoSQLにログを記録してから、JSON本文のログエントリのUUIDを含む適切なHTTPエラーコードをクライアントに返します。 ドキュメントはこれを行う方法について曖昧でした。独自のErrorController実装を作成するか、何らかの方法でControllerAdviceを使用する必要があるように見えますが、私が見たすべての例には、応答を何らかのエラーマッピングに転送することが含まれているため、役に立ちません。他の例では、単に「Throwable」をリストしてすべてを取得するのではなく、処理するすべての例外タイプをリストする必要があることを示唆しています。 誰かが私が見逃したことを教えてもらえますか、またはNode.jsがより扱いやすいチェーンを提案することなく、これを行う方法について正しい方向を教えてくれますか?

9
HttpResponseExceptionをスローするか、Request.CreateErrorResponseを返しますか?
ASP.NET Web APIでの例外処理の記事を確認した後、例外をスローするタイミングとエラーレスポンスを返すタイミングについて少し混乱しています。メソッドがドメイン固有のモデルではなくHttpResponseMessage...を返すときに応答を変更できるかどうかも疑問に思っています。 だから、ここで要約すると、私の質問の後にケース番号付きのコードが続きます: ご質問 ケース#1に関する質問 HttpResponseMessageメッセージをカスタマイズできるように、具体的なドメインモデルではなく常に使用する必要がありますか? 具体的なドメインモデルを返す場合、メッセージをカスタマイズできますか? ケース#2、3、4に関する質問 例外をスローするか、エラー応答を返す必要がありますか?答えが「依存する」である場合、どちらを使用するかについて状況/例を挙げられますか。 投げHttpResponseExceptionvs はどう違いRequest.CreateErrorResponseますか?クライアントへの出力は同じようです... HttpErrorエラーに応答メッセージを「ラップ」するために常に使用する必要がありますか(例外がスローされるか、エラー応答が返されるか)。 ケースサンプル // CASE #1 public Customer Get(string id) { var customer = _customerService.GetById(id); if (customer == null) { var notFoundResponse = new HttpResponseMessage(HttpStatusCode.NotFound); throw new HttpResponseException(notFoundResponse); } //var response = Request.CreateResponse(HttpStatusCode.OK, customer); //response.Content.Headers.Expires = new DateTimeOffset(DateTime.Now.AddSeconds(300)); return …

3
.NETのApplicationExceptionとは何ですか?
例外をスローするには、通常、組み込みの例外クラスを使用します(例:ArgumentNullExceptionおよび)NotSupportedException。ただし、カスタム例外を使用する必要がある場合があり、その場合は次のように記述します。 class SlippedOnABananaException : Exception { } class ChokedOnAnAppleException : Exception { } 等々。次に、これらをコードにスローしてキャッチします。しかし、今日私はApplicationExceptionクラスに出くわしました-代わりにそれを使うべきですか?何のために? 異なる名前の効果的に同一のExceptionクラスを多数持つことは非効率的に見えます(通常、個別の機能は必要ありません)。しかし、私はジェネリックをキャッチしApplicationException、エラーが何であるかを決定するために追加のコードを使用しなければならないという考えを嫌います。 ApplicationException私のコードはどこに合わせる必要がありますか?

15
Java 8:Lambda-Streams、例外付きのメソッドでフィルター
Java 8のLambda式を試してみるのに問題があります。通常は問題なく動作しますが、今ではをスローするメソッドがありIOExceptionます。次のコードを確認すると最適です。 class Bank{ .... public Set<String> getActiveAccountNumbers() throws IOException { Stream<Account> s = accounts.values().stream(); s = s.filter(a -> a.isActive()); Stream<String> ss = s.map(a -> a.getNumber()); return ss.collect(Collectors.toSet()); } .... } interface Account{ .... boolean isActive() throws IOException; String getNumber() throws IOException; .... } 問題は、コンパイルされないことです。これは、isActive-およびgetNumber-Methodsの起こり得る例外をキャッチする必要があるためです。しかし、以下のようにtry-catch-Blockを明示的に使用しても、例外をキャッチしないため、コンパイルされません。したがって、JDKにバグがあるか、これらの例外をキャッチする方法がわかりません。 class Bank{ .... //Doesn't compile …

2
Javascriptで例外を再スローしながらスタックを保持するにはどうすればよいですか?
JavaScriptで、例外が発生したときにいくつかのクリーンアップを実行したいが、例外がスタックに伝播し続けるようにしたいとします。例: try { enterAwesomeMode(); doRiskyStuff(); // might throw an exception } catch (e) { leaveAwesomeMode(); throw e; } doMoreStuff(); leaveAwesomeMode(); このコードの問題は、例外をキャッチして再スローすると、その時点までのスタックトレース情報が失われるため、その後例外が再びキャッチされた場合、スタックの上位でスタックトレースがreまでしかダウンしないことです。 -スロー。これは、実際に例外をスローした関数が含まれていないことを意味するため、面倒です。 結局のところ、try..finallyは少なくともChromeで同じ動作をします(つまり、問題の原因となっているのは再スローではなく、例外ハンドラーブロックの存在です)。 誰かがJavascriptで例外を再スローする方法を知っていますが、それに関連付けられたスタックトレースを保持しますか?それができない場合、例外が発生したときに完全なスタックトレースをキャプチャしながら、例外セーフクリーンアップハンドラーを追加する他の方法の提案についてはどうでしょうか。 ポインタをありがとう:)


5
既存の情報を保持しながら、異なるタイプとメッセージで例外を再発生させます
私はモジュールを書いていて、それが発生させることができる例外のために統一された例外階層を持ちたいと思っています(たとえばFooError、すべてのfooモジュールの特定の例外の抽象クラスから継承する)。これにより、モジュールのユーザーはこれらの特定の例外をキャッチし、必要に応じてそれらを明確に処理できます。ただし、モジュールから発生した例外の多くは、他の例外のために発生します。たとえば、ファイルのOSErrorが原因であるタスクで失敗する。 必要なのは、キャッチされた例外を「ラップ」して、タイプとメッセージが異なるようにすることです。これにより、例外をキャッチしたものは何であっても、伝播階層のさらに上位で情報を利用できます。しかし、既存のタイプ、メッセージ、スタックトレースを失いたくありません。これは、問題をデバッグしようとしている人にとってすべての有用な情報です。トップレベルの例外ハンドラーは、伝播スタックをさらに上に行く前に例外を装飾しようとしているため、トップレベルのハンドラーが遅すぎるため、上手ではありません。 これは、モジュールfooの特定の例外タイプを既存のタイプ(例:)から派生させることで部分的に解決されclass FooPermissionError(OSError, FooError)ますが、既存の例外インスタンスを新しいタイプでラップしたり、メッセージを変更したりすることは簡単ではありません。 PythonのPEP 3134「Exception Chaining and Embedded Tracebacks」では、既存の例外の処理中に新しい例外が発生したことを示すために、Python 3.0で「チェーン」例外オブジェクトとして受け入れられた変更について説明しています。 私がやろうとしていることは関連しています:以前のバージョンのPythonでも機能する必要があり、チェーニングのためではなく、ポリモーフィズムのためだけに必要です。これを行う正しい方法は何ですか?

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