問題タブ [try-catch-finally]
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.
vb.net - COMException(vb.net)をキャッチできません
次のコードを使用してVSSアイテムにアクセスします。
私が直面する問題は、VSSDBに存在しないファイルにインスタンスを取得しようとすると、COMExceptionが発生しますが、これは基本的に問題にはなりません(私は予想します)。実際には例外が発生しますが、catchコードを続行する代わりに、デバッグカーソルは「oItem = m_oSourceSafe.VSSItem(sItem)」の行に留まり、「COMExceptionがネイティブ/管理対象の境界を超えました」というタイトルのダイアログが表示されます。
ここから、sItemの内容を既存のファイルに変更するまで、実行は続行されません。
例外がキャッチされないのはなぜですか?また、どうすればそれを達成できますか?
環境:WinXPSP3x86上の.Net2.0を使用したVS2010
仲間に感謝します!
java - catch と finally での return ステートメントの動作
「10」を返します。
ここで、Return 型 Integer を StringBuilder に置き換えるだけで、出力が変更されました。
出力は「abcaaa」
だから、誰でも私に詳しく説明できますか?違いは何ですか。
scala - try/catch ブロックで最終的に「範囲外」になる
finally ブロック内の try/catch ブロックで作成された val にアクセスする方法はありますか? または、スコープ外の finally ブロックです。
c# - なぜfinallyブロックのコードが実行されないのですか?
メインスレッド以外の実行コードの場合、finallyブロックは実行されないようです。その場合、最終的に強制的に実行することは可能ですか?
環境:VS 2010、.Net Framework 4.0.3
アップデート:
私はMSDNでそのケースについての言及と説明を見つけました:
ThreadAbortExceptionクラス http://msdn.microsoft.com/en-us/library/system.threading.threadabortexception.aspx
スレッドを破棄するためにAbortメソッドが呼び出されると、共通言語ランタイムはThreadAbortExceptionをスローします。ThreadAbortExceptionはキャッチできる特別な例外ですが、catchブロックの最後で自動的に再度発生します。この例外が発生すると、ランタイムはスレッドを終了する前にすべてのfinallyブロックを実行します。スレッドはfinallyブロックで無制限の計算を実行するか、Thread.ResetAbortを呼び出して中止をキャンセルできるため、スレッドが終了する保証はありません。中止されたスレッドが終了するまで待機する場合は、Thread.Joinメソッドを呼び出すことができます。参加は、スレッドが実際に実行を停止するまで戻らないブロッキング呼び出しです。
ノート:
共通言語ランタイム(CLR)は、管理対象の実行可能ファイル内のすべてのフォアグラウンドスレッドが終了した後、バックグラウンドスレッドを停止する場合、Thread.Abortを使用しません。したがって、ThreadAbortExceptionを使用して、バックグラウンドスレッドがCLRによって終了されていることを検出することはできません。
フォアグラウンドスレッドとバックグラウンドスレッド http://msdn.microsoft.com/en-us/library/h339syd0.aspx
プロセスがシャットダウンしているためにランタイムがバックグラウンドスレッドを停止しても、スレッドで例外はスローされません。ただし、AppDomain.Unloadメソッドがアプリケーションドメインをアンロードするためにスレッドが停止すると、フォアグラウンドスレッドとバックグラウンドスレッドの両方でThreadAbortExceptionがスローされます。
では、なぜアプリケーションの終了時にCLRがAppDomain.Unloadメソッドを使用して、メインプロセスの終了(kill)の前にアプリケーションドメインをアンロードしないのでしょうか。http://msdn.microsoft.com/en-us/library/system.appdomain.unload.aspx:_
スレッドがUnloadを呼び出すと、ターゲットドメインはアンロード用にマークされます。専用スレッドがドメインのアンロードを試み、ドメイン内のすべてのスレッドが中止されます。アンマネージコードを実行している、またはfinallyブロックを実行しているなどの理由でスレッドが異常終了しない場合、一定期間後、Unloadを最初に呼び出したスレッドでCannotUnloadAppDomainExceptionがスローされます。中止できなかったスレッドが最終的に終了した場合、ターゲットドメインはアンロードされません。したがって、 .NET Frameworkバージョン2.0では、実行中のスレッドを終了できない可能性があるため、ドメインのアンロードは保証されません。
結論:場合によっては、コードがバックグラウンドスレッドで実行されるのかフォアグラウンドスレッドで実行されるのかを検討する必要がありますか?アプリケーションのメインスレッドがすべての作業を終了する前にコードが終了しない可能性はありますか?
objective-c - Objective-cトライ/キャッチがキャッチされない
以下がうまくいかない理由はありますか?
try / catchの質問と同様に、上記のブロックが毎回クラッシュするように見えるだけです。他の質問から上記のtry/catchを設定したので、デバッガーが正しく設定されていることを知っています。
java - 例外を処理するのではなく、例外を宣言するポイントは何ですか
私が理解している限り、チェックされた例外のみを宣言すると、すべてのメソッドを介してメイン メソッドに伝播し、通常のプログラム フローが中断され、プログラムは動作を停止します。では、チェックされた例外を常に try/catch で処理しないのはなぜでしょうか? そうすれば、例外によってプログラムが停止することはありません。なぜわざわざメソッドのシグネチャで例外を宣言するのでしょうか? 下手な英語でごめんなさい
java - 最終セクションでキャッチしてみてください
finally 句内に try と catch を記述するのは悪いプログラミングと見なされますか?
メインメソッドに、閉じたいfileInputStreamがあります。.close() を finally に配置したいので、何があっても閉じます。メインメソッドであるため、スロー宣言をメインメソッドに追加したくありません:P
大丈夫ですか?ありがとう
vb.net - Final ブロックでオブジェクトを Nothing に設定するのはなぜですか?
この VB.NET コードでは:
o を に設定する必要があるのはなぜNothing
ですか? ブロックに設定しないとどうNothing
なりますか? オブジェクトがGC用にマークされるため、Finally
設定しなくても問題ないと思います。Nothing
java - 最後に Oracle の Java ストアド プロシージャでブロックが機能しない
以下のコードをコンパイルすると、「シンボル変数が見つかりません」というエラーが表示されますが、finally ブロックのコードをコメントにすると、正常にコンパイルできます。
お知らせ下さい。
python - Python: finally ブロックで例外が発生した場合、try ブロックから例外を回復する
次のようなコードがあるとします。
出力は次のとおりです。
その print ステートメントの時点から、try で発生した例外にアクセスする方法はありますか、それとも永遠に消えてしまったのでしょうか?
注: 使用例は考えていません。これはただの好奇心です。