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

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

4
PHPでは「do OR OR DIE()」はどのように機能しますか?
私は、MySQLデータベースにアクセスするためのphpアプリを書いており、チュートリアルでは、次のような形式のメッセージが表示されます mysql_connect($host, $user, $pass) or die("could not connect"); PHPは、関数が失敗したことをどのようにして認識し、ダイパーツを実行しますか?私はそれの「または」部分がどのように機能するかを尋ねていると思います。今まで見たことがないと思います。

14
std :: exceptionから継承する必要がありますか?
少なくとも1つの信頼できるソース(私が採用したC ++クラス)で、C ++のアプリケーション固有の例外クラスがから継承することを推奨しているのを見てきましたstd::exception。このアプローチの利点ははっきりしません。 C#から継承する理由ApplicationExceptionは明らかです。便利なメソッド、プロパティ、コンストラクターをいくつか取得し、必要なものを追加またはオーバーライドするだけです。ではstd::exception、それあなたが得るすべてであると思わwhat()あなただけのようにも自分で作成することができオーバーライドする方法。 それではstd::exception、アプリケーション固有の例外クラスの基本クラスとして使用することにはどのような利点がありますか?継承しない理由はありますstd::exceptionか?

5
Rでの例外処理[終了]
閉まっている。この質問はスタックオーバーフローのガイドラインを満たしていません。現在、回答を受け付けていません。 この質問を改善してみませんか?Stack Overflowのトピックとなるように質問を更新します。 4年前休業。 この質問を改善する Rでの例外処理の例/チュートリアルはありますか?公式ドキュメントは非常に簡潔です。



3
例外で完全なスタックトレースを印刷するにはどうすればよいですか?
たとえば、ある場所で... //---------------a try { // some network call } catch(WebException we) { throw new MyCustomException("some message ....", we); } ...そして別の場所で... //--------------b try { // invoke code above } catch(MyCustomException we) { Debug.Writeline(we.stacktrace); // <---------------- } 私が出力するスタックトレースは、aからbまでで始まり、WebExceptionからの内部スタックトレースは含まれていません。 すべてのスタックトレースを出力するにはどうすればよいですか?

4
Rubyカスタムエラークラス:メッセージ属性の継承
カスタム例外クラスに関する情報があまり見つからないようです。 私が知っていること カスタムエラークラスを宣言し、それをから継承させるStandardErrorことができるため、次のようになりますrescue。 class MyCustomError < StandardError end これはあなたがそれを使ってそれを上げることを可能にします: raise MyCustomError, "A message" 後で、救助時にそのメッセージを受け取ります rescue MyCustomError => e puts e.message # => "A message" 私の知らないこと いくつかのカスタムフィールドを例外にしたいがmessage、親クラスから属性を継承したい。例外クラスのインスタンス変数ではないこのトピックを読ん@messageだので、継承が機能しないのではないかと心配しました。 誰か私にこれの詳細を教えてもらえますか?object属性を使用してカスタムエラークラスを実装するにはどうすればよいですか?次は正しいですか: class MyCustomError < StandardError attr_reader :object def initialize(message, object) super(message) @object = object end end その後: raise MyCustomError.new(anObject), "A message" 取得するため: rescue MyCustomError …

3
「キャッチ、いつ」で例外をキャッチする
特定の条件が満たされたときにキャッチハンドラーを実行できるC#のこの新機能を見つけました。 int i = 0; try { throw new ArgumentNullException(nameof(i)); } catch (ArgumentNullException e) when (i == 1) { Console.WriteLine("Caught Argument Null Exception"); } これがいつ役立つかを理解しようとしています。 次のようなシナリオが考えられます。 try { DatabaseUpdate() } catch (SQLException e) when (driver == "MySQL") { //MySQL specific error handling and wrapping up the exception } catch (SQLException …

4
構造を比較するときに、このアサートがフォーマット例外をスローするのはなぜですか?
2つのSystem.Drawing.Size構造が等しいことをアサートしようとしていますが、予期されるアサートエラーの代わりにフォーマット例外が発生します。 [TestMethod] public void AssertStructs() { var struct1 = new Size(0, 0); var struct2 = new Size(1, 1); //This throws a format exception, "System.FormatException: Input string was not in a correct format." Assert.AreEqual(struct1, struct2, "Failed. Expected {0}, actually it is {1}", struct1, struct2); //This assert fails properly, "Failed. Expected {Width=0, …

1
イェソドの例外
非常に原始的な形式ipc(telnet を使用して、特定の単語を特定の順序で含む文字列を送信する)を使用するデーモンを作成しました。私はそれから飛び出し、現在サーバーにJSONメッセージを渡すために使用していYesodます。しかし、自分のデザインについて本当に気に入った点がいくつかありました。今、私の選択肢が何であるかわかりません。 これが私がやっていたことです: buildManager :: Phase -> IO () buildManager phase = do let buildSeq = findSeq phase jid = JobID $ pack "8" config = MkConfig $ Just jid flip C.catch exceptionHandler $ runReaderT (sequence_ $ buildSeq <*> stages) config -- ^^ I would really like to keep the …

10
どうすれば404をキャッチできますか?
私は次のコードを持っています: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.Method = "HEAD"; request.Credentials = MyCredentialCache; try { request.GetResponse(); } catch { } 特定の404エラーをキャッチするにはどうすればよいですか?WebExceptionStatus.ProtocolErrorは、エラーが発生したことを検出するだけで、エラーの正確なコードを提供することはできません。 例えば: catch (WebException ex) { if (ex.Status != WebExceptionStatus.ProtocolError) { throw ex; } } 十分に役に立たないだけです...プロトコル例外は401、503、403など、実際には何でもかまいません。

4
try / catch / finallyで待つための良い解決策はありますか?
次のように例外を(スタックトレースとともに)再度スローする前asyncに、catchブロック内のメソッドを呼び出す必要があります。 try { // Do something } catch { // <- Clean things here with async methods throw; } ただし、残念ながらawait、catchまたはfinallyブロックでは使用できません。それは、コンパイラーがcatchブロック内に戻ってawait命令の後にあるものを実行する方法がないためだと学びました... を使用Task.Wait()して交換しようとしたawaitところ、デッドロックが発生しました。これを回避する方法をウェブで検索して、このサイトを見つけました。 asyncメソッドを変更することも、使用するかどうかもわからないため、別のスレッドで(デッドロックを回避するために)非同期メソッドを開始し、その完了を待機するConfigureAwait(false)これらのメソッドを作成Func<Task>しました。 public static void AwaitTaskSync(Func<Task> action) { Task.Run(async () => await action().ConfigureAwait(false)).Wait(); } public static TResult AwaitTaskSync<TResult>(Func<Task<TResult>> action) { return Task.Run(async () => await action().ConfigureAwait(false)).Result; } public static void …

15
Cでのエラー管理のためのgotoの有効な使用?
この質問は、実際には、少し前にprogramming.reddit.comで行われた興味深い議論の結果です。基本的には次のコードになります。 int foo(int bar) { int return_value = 0; if (!do_something( bar )) { goto error_1; } if (!init_stuff( bar )) { goto error_2; } if (!prepare_stuff( bar )) { goto error_3; } return_value = do_the_thing( bar ); error_3: cleanup_3(); error_2: cleanup_2(); error_1: cleanup_1(); return return_value; } ここでの使用法がgoto最善の方法であるように見え、すべての可能性の中で最もクリーンで最も効率的なコードが得られるか、少なくとも私には思えます。コード・コンプリートでのスティーブ・マコーネルの引用: gotoは、リソースを割り当て、それらのリソースに対して操作を実行し、リソースの割り当てを解除するルーチンで役立ちます。gotoを使用すると、コードの1つのセクションをクリーンアップできます。gotoを使用すると、エラーを検出した各場所でリソースの割り当てを忘れる可能性が低くなります。 このアプローチの別のサポートは、このセクションのLinux …

7
C ++で例外がスローされた場所を見つけるにはどうすればよいですか?
どこかでキャッチされない例外をスローするプログラムがあります。私が受け取るのは、例外がスローされたというレポートであり、例外がスローされた場所に関する情報はありません。デバッグシンボルを含むようにコンパイルされたプログラムが、コードのどこで例外が生成されたかを通知しないのは、非論理的です。 gdbで 'catch throw'を設定し、スローされたすべての例外に対してバックトレースを呼び出す以外に、私の例外がどこにあるのかを知る方法はありますか?

3
他のRails例外と同様に動作するように、Railsで例外を発生させるにはどうすればよいですか?
例外を発生させて、通常のRails例外と同じことを行いたいと思います。特に、開発モードで例外とスタックトレースを表示し、プロダクションモードで「申し訳ありませんが、問題が発生しました」ページを表示します。 私は以下を試しました: raise "safety_care group missing!" if group.nil? しかし、それは単に"ERROR signing up, group missing!"development.logファイルに書き込みます

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