タグ付けされた質問 「try-catch」

try-catchは、コードセクションによって発生した例外をキャッチするための構文構造です

14
java.lang.OutOfMemoryError?
のドキュメントはjava.lang.Error言う: ErrorはThrowableのサブクラスであり、妥当なアプリケーションがキャッチしようとしてはならない重大な問題を示します しかしjava.lang.Error、のサブクラスとjava.lang.Throwable同様に、このタイプのThrowableをキャッチできます。 なぜこの種の例外をキャッチするのが良くないのか理解しています。私が理解している限り、キャッチすることにした場合、キャッチハンドラはそれ自体でメモリを割り当てるべきではありません。それ以外の場合OutOfMemoryErrorは再びスローされます。 だから、私の質問は: 捕まえるのjava.lang.OutOfMemoryErrorが良いかもしれない現実のシナリオはありますか? キャッチすることにした場合java.lang.OutOfMemoryError、キャッチハンドラがそれ自体でメモリを割り当てないようにするにはどうすればよいですか(ツールやベストプラクティス)。

15
最終的にブロックで例外をスローします
finallyブロックでスローされる例外を処理するエレガントな方法はありますか? 例えば: try { // Use the resource. } catch( Exception ex ) { // Problem with the resource. } finally { try{ resource.close(); } catch( Exception ex ) { // Could not close the resource? } } ブロック内のtry/をどのように回避しますか?catchfinally

4
Pythonの「with」ステートメントをtry-exceptブロックで使用する
これは、Pythonの「with」ステートメントをtry-exceptブロックと組み合わせて使用​​する正しい方法ですか?: try: with open("file", "r") as f: line = f.readline() except IOError: <whatever> もしそうなら、それから物事の古い方法を考えてください: try: f = open("file", "r") line = f.readline() except IOError: <whatever> finally: f.close() ここでの「with」ステートメントの主な利点は、3行のコードを削除できることですか?この使用例では、私にとって説得力があるとは思えません( "with"ステートメントには他の使用があることは理解していますが)。 編集:上記の2つのコードブロックの機能は同じですか? EDIT2:最初のいくつかの回答は「with」を使用することの利点について一般的に述べていますが、それらはここではわずかな利点のようです。私たちは何年もの間、明示的にf.close()を呼び出してきました(またはそうすべきだったはずです)。1つの利点は、ずさんなコーダーが「with」を使用することから利益を得るということです。



3
デッドロックが原因のSqlExceptionをキャッチする方法は?
.NET 3.5から/ C#のアプリは、私がキャッチしたいと思いますSqlExceptionが、それはデッドロックによって引き起こされている場合のみ、SQL Server 2008のインスタンスに。 一般的なエラーメッセージは Transaction (Process ID 58) was deadlocked on lock resources with another process and has been chosen as the deadlock victim. Rerun the transaction. しかし、それはこの例外の文書化されたエラーコードではないようです。 メッセージ内のデッドロックキーワードの存在に対する例外のフィルタリングは、この動作を達成するための非常に醜い方法のようです。誰かがこれを行う正しい方法を知っていますか?

11
try-finallyとtry-catchの違い
違いは何ですか try { fooBar(); } finally { barFoo(); } そして try { fooBar(); } catch(Throwable throwable) { barFoo(throwable); // Does something with throwable, logs it, or handles it. } Throwableにアクセスできるので、2番目のバージョンの方が好きです。2つのバリエーションの間に論理的な違いや推奨される慣習はありますか? また、finally句から例外にアクセスする方法はありますか?

6
Node.jsは、スポーン後にスローされたENOMEMエラーをキャッチします
spawnを使用すると、ENOMEM(メモリ不足)errnoExceptionがスローされたため、Node.jsスクリプトがクラッシュします。 エラー: child_process.js:935 throw errnoException(process._errno, 'spawn'); ^ Error: spawn ENOMEM at errnoException (child_process.js:988:11) at ChildProcess.spawn (child_process.js:935:11) at Object.exports.spawn (child_process.js:723:9) at module.exports ([...]/node_modules/zbarimg/index.js:19:23) 私はすでにerrorandexitイベントのリスナーを使用していますが、このエラーが発生した場合にリスナーは起動されません。 私のコード: zbarimg = process.spawn('zbarimg', [photo, '-q']); zbarimg.on('error', function(err) { ... }); zbarimg.on('close', function(code) { ... }); 利用可能な完全なソースコード。 スクリプトがクラッシュするのを防ぐためにできることはありますか?スローされたENOMEMエラーをキャッチするにはどうすればよいですか? ありがとう!

2
Swiftのスローと再スローの違いは何ですか?
それを把握するためにいくつかの参照を検索した後、私は間の違いを理解に関する有用な-and simple-説明を見つけることができませんでした-unfortunately-throwsとをrethrows。それらをどのように使用すべきかを理解しようとすると、ちょっと混乱します。 私はthrows、次のように、エラーを伝播するための最も単純な形式の-default-にある程度精通していることを述べておきます。 enum CustomError: Error { case potato case tomato } func throwCustomError(_ string: String) throws { if string.lowercased().trimmingCharacters(in: .whitespaces) == "potato" { throw CustomError.potato } if string.lowercased().trimmingCharacters(in: .whitespaces) == "tomato" { throw CustomError.tomato } } do { try throwCustomError("potato") } catch let error as CustomError { switch error …

13
構文の悪い習慣を満たすためだけにreturnステートメントがありますか?
次のコードについて考えてみます。 public Object getClone(Cloneable a) throws TotallyFooException { if (a == null) { throw new TotallyFooException(); } else { try { return a.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); } } //cant be reached, in for syntax return null; } return null;例外がキャッチされる可能性があるため、これが必要ですが、そのような場合は、nullであるかどうかをすでに確認しているため(呼び出しているクラスがクローン作成をサポートしていることがわかっていると仮定します)、tryステートメントが失敗することはありません。 構文を満たし、コンパイルエラーを回避するために(到達しないことを説明するコメント付きで)最後に追加のreturnステートメントを挿入するのは悪い習慣ですか、それともこのようなコードを追加して追加するより良い方法がありますか? returnステートメントは不要ですか?
82 java  return  try-catch 

5
Linuxでセグメンテーション違反をキャッチする方法は?
サードパーティのライブラリクリーンアップ操作でセグメンテーション違反をキャッチする必要があります。これは、プログラムが終了する直前に発生することがあり、この本当の理由を修正することはできません。Windowsプログラミングでは、これは__try --__ catchで実行できます。同じことを行うためのクロスプラットフォームまたはプラットフォーム固有の方法はありますか?Linux、gccでこれが必要です。

3
Java-8で複数の例外をキャッチする
私の方法で見つけたマルチキャッチ機能を試している間、m1()すべてが期待どおりにうまく機能しています。 ただし、m2()同じコードではコンパイルされません。コードの行数を減らすために構文を変更しました。 public class Main { public int m1(boolean bool) { try { if (bool) { throw new Excep1(); } throw new Excep2(); //This m1() is compiling abs fine. } catch (Excep1 | Excep2 e) { return 0; } } public int m2(boolean b) { try { throw b ? …


2
CATCHブロックでの例外と失敗の区別[RAKU]
失敗はCATCHブロックで処理できることがわかっています。 次の例では、「AdHoc」障害(other-sub内)を作成し、CATCHブロック(my-sub内)で例外を処理します。 sub my-sub { try { CATCH { when X::AdHoc { say 'AdHoc Exception handled here'; .resume } default {say 'Other Exception'; .resume} } my $b = other-sub(); $b.so ?? $b.say !! 'This was a Failure'.say; } } sub other-sub { fail 'Failure_X' } my-sub(); 出力は次のとおりです。 AdHoc Exception handled …
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.