約 61,111 件
https://w.atwiki.jp/s3study/pages/37.html
例外処理というのは、なんらかの異常や条件を満たしていなかったときに行う処理のこ とです。 例外を投げると、続く処理をやめ、すぐに例外処理に飛びます。 Cでは、例えば複数のネストのなかにあるループの処理中に異常が発生した場合、どう やって抜けるか、gotoを使うべきか、などといった話題が出たものですが、C#ではtry/ chatchという異常時に行う命令が追加されています。 例えば、Cでは以下のような場合gotoを使わないとかなり面倒な処理をしなければなりま せん。 while( 1 ) { while( 1 ) { //ここで問題が発生 ループから抜けたい } } C#なら、例外を投げるだけですみます。 上記のような特殊ケースはもとより、異常発生時は続く処理を行わないというのは殆ど の場合当てはまるケースです。 なので、アプリケーションを作成していると、例外処理を書かないというのはあまり無 いといっていいでしょう。 私はコピープログラムで以下のようなコードを書きました。 private void CopyFile(string src, string dest) { StreamReader sr = new StreamReader(src , Encoding.GetEncoding("shift_jis")); StreamWriter sw = new StreamWriter(dest, false, Encoding.Unicode); while (!sr.EndOfStream ) { string ReadText; ReadText = sr.ReadLine(); sw.WriteLine(ReadText); sw.Flush(); } sr.Close(); sw.Close(); } private void button1_Click(object sender, EventArgs e) { if (!textBox1.Text.Equals("") !textBox2.Text.Equals("")) { if (File.Exists(textBox1.Text)) { CopyFile(textBox1.Text, textBox2.Text); } else { MessageBox.Show("コピー元のファイルは存在しないか、パスが不正です"); } } else { MessageBox.Show("コピー元/コピー先のファイル名を入力してください"); } } ボタンクリックイベントの処理は、間違いではないですが、ちょいと見づらいコードです。 例外処理を使うと、こんな感じになります。 private void button1_Click(object sender, EventArgs e) { try { if ( textBox1.Text.Equals("") || textBox2.Text.Equals("")) { throw new Exeption("コピー元/コピー先のファイル名を入力してください"); } if( (File.Exists(textBox1.Text) ) { throw new Exeption("コピー元のファイルは存在しないか、パスが不正です"); } CopyFile(textBox1.Text, textBox2.Text); } catch( Exeption ex ) { MessageBox.Show( ex.Message ); } } 幾分すっきりしました。 でも、実は、C#の殆どのメソッドは、引数などのチェックを行ってくれます。 そのとき、異常があった場合は例外処理を投げてくれるのです。 つまり、自分でこのようなチェックを行う必要は無かったりします。 そこいらを考慮してプログラムを作成すると…… private void button1_Click(object sender, EventArgs e) { try { CopyFile(textBox1.Text, textBox2.Text ); } catch (ArgumentException ex) { MessageBox.Show( ex.Message); } } で、済みます。 簡単ですね。 エラーメッセージもコンパイラ側が用意してくれたものが表示されるので、意味不明な エラーにはならないというメリットもあります(知っている人が見ればすぐ分かる) 基本的な使い方 まず、例外が発生する可能性のある場所、つまり、例外処理を行いたい部分をtryで囲み ます。 そして、tryの下に例外が発生した場合に行う処理を、catchで囲みます。 例外が発生したしないに関わらず行いたい処理があればcatchの下にfinallyで囲みます。 try { //ここに例外が発生する可能性の有り処理を記述 } catch( Exception ex ) { //例外が発生した場合の処理を記述 } finally { //例外の発生有無にかかわらず行いたい処理をここに記述 //無くてもかまわない } 例外を投げる C#のメソッドで問題が発生した場合、例外を投げてくれるのは先ほど説明しましたが、 例外をプログラマが投げたい場合は、throwキーワードを使用します。 C++とちがって、文字列や数値型を投げることは出来ません。 例外用クラスが用意されているので、それを使います。 例外用クラスは、基本クラスのExeptionや、引数が異常のときに投げるArgumentExeption 等、目的によって使うクラスを使い分けることが出来ます。 例外を投げる際は、インスタンス化してある例外クラスを投げるか、throwキーワードの 後にnewキーワードを用います。 コンストラクタは幾つかオーバーロードされています。 これについてはの地ほど説明を行います。 例外を受け取る 投げた例外は、catchキーワードのカッコ内で、対象の例外クラスと、オブジェクト名を 記述して受け取ります。 C++と違って、どのような例外でも受け取る「...」は使えません。 また、catchは複数記述することが出来ます。 例えば、引数例外であるArgumentExeptionと、システム例外であるSystemExeptionで、 異なる処理を記述できます。 メソッド内にcatchキーワードが無い場合、メソッドの呼び出し元に例外の発生を知らせ ます。 ファイルコピーの例を見てください。 例外が発生するのはCopyFileメソッドですが、例外を受け取って処理を行っているのは button1_Clickイベントです。 例 private void Method() { throw new Exception(); //例外を投げる } private void button1_Click(object sender, EventArgs e) { try { Method(); //呼び出し元 } catch( Exception ex ) { //Methodで投げた例外を処理 MessageBox.Show("ボタンクリックイベントで例外を処理"); } } catchの中で、更に例外を投げることも出来ます。 これは、メソッド内で例外処理を行った後、メソッドの送信元でも例外処理を行いたい 時などに使用します。 その際は、投げる例外を省くと(つまり、throwだけを記述すると)受け取った例外をそ のまま投げてくれます。 private void Method() { try { throw new Exeption(); //例外を投げる } catch( Exception ex ) { //例外を処理する MessageBox.Show("メソッドで例外を処理"); throw; //ここで受け取った例外を更に投げる } } private void button1_Click(object sender, EventArgs e) { try { Method(); //呼び出し元 } catch( Exception ex ) { //Methodのcatchで投げた例外は、ここで処理される MessageBox.Show("ボタンクリックイベントで例外を処理"); } } 共通処理 例外が発生した・しないにかかわらず行いたい処理があればfinallyの括弧内に処理を 記述します。 C++のようにcatchの後にコードを書いてもほぼ同じように動作しますが、finallyは、 catchの中で、例外を投げてもfinallyに記述したコードが実行されるという点が異なり ます。 例えば、以下の例では「共通の処理?」は表示されません。 private void Method() { try { throw new Exeption(); } catch( Exception ex ) { throw; } MessageBox.Show("共通の処理?"); } private void button1_Click(object sender, EventArgs e) { try { Method(); } catch( Exception ex ) { MessageBox.Show("ボタンクリックイベントで例外を処理"); } } Methodを以下のようにすれば、メッセージが表示されます。 private void Method() { try { throw new Exception(); } catch( Exception ex ) { throw; } finally { MessageBox.Show("共通の処理!"); } } 例外クラス 例外クラスのコンストラクタは幾つかオーバーロードされていますが、よく使うのはパ ラメータが空のものと、文字列を渡すものでしょう。 文字列を渡すと、Messageプロパティに渡した文字がセットされます。 例 private void button1_Click(object sender, EventArgs e) { try { throw new Exception("例外発生"); } catch( Exception ex ) { MessageBox.Show( ex.Message ); } } 例外クラスの派生クラス、例えばArgumentException等はコンストラクタやプロパティが 追加されていたりしますが、基本的な使い方は一緒です。
https://w.atwiki.jp/knowledge_library/pages/101.html
例外とは try-catch-finaly文 例外クラス 例外をかわす(throwsキーワード) 例外を投げる例外クラスのメソッド 独自の例外クラスの作成 オーバロード・オーバライドにおける例外の条件 例外とは 例外には大きくチェック例外(発生時の対処の記述が必須な例外)を非チェック例外(実行時例外、発生時の対処の記述が必須でない)に分けられる チェック例外は対処するコードを書かないとコンパイルエラーになる 非チェック例外は対処するコードを書くかどうかは自由 try-catch-finaly文 try{ //通常の処理 }catch(例外クラス名 引数){ //例外への対処 }finaly{ //例外発生の有無にかかわらず最後に必ず実行される処理 } 例外の対処には、例外が発生しそうなコードをtry-catchブロックで囲む catch文には、発生すると予測される例外の型に応じた引数を書く 例外とそれに対応するクラス型を知っておく必要がある 例外が発生すると直ちに該当のcatch文に制御が移る catch文に制御が移ると残りの処理は実行されない finalyブロックに書いた処理は全ての処理の後に必ず実行される 例外クラス クラス 意味 概要 RuntimeException 実行時例外 プログラムミスに起因するエラー状態 ClassCastException キャストの失敗 オブジェクトの型に注目。スーパークラス= サブクラスでオブジェクトの実体がスーパークラスあるいは継承関係にないクラスであるときにおきる IllegalArgumentException 不正な引数 不正な引数、不適切な引数をメソッドに渡した時に発生する NumberFormatException 数値型文字列の書き誤り 文字列を数値型に変換しようとした時、文字列の形式が正しくなかったという例外。数値に直せない文字列が原因で発生する IllegalStateException 不正な状態での呼び出し 不適切なジョウタでメソッドを呼び出したときの例外 IndexOutOfBoundsException 不正な状態での呼び出し 配列や文字列の操作で範囲を超えてアクセスした ArrayIndexOutOfBoundsException 配列の要素番号が範囲外 配列や文字列の操作で範囲を越えてアクセスした NullPointerException 使ったオブジェクトがnull nullを使って配列やクラスオブジェクトを参照しようとした ArithmeticException 算術エラー 算術計算で例えばゼロでintの値を割るなどのエラー 例外をかわす(throwsキーワード) import java.io.FileReader; import java.io.FileNotFoundException; import java.io.IOException; public class Exec { public static void main(String[] args){ try{ readFile(); } catch(FileNotFoundException e){ System.err.println("File is not found"); //標準エラー出力 System.err.println } catch(IOException e){ System.err.println("File is not reading"); } } public static void readFile() throws IOException { FileReader in = new FileReader("note.txt"); //ファイルを開く int c = in.read(); //ファイルから1文字読む System.out.println((char)c); //文字にキャストして表示 in.close(); //ファイルを閉じる } } チェック例外はtry-catchで例外処理をしなければならない 例外処理をしない場合はthrowsを宣言しなければならない 例外を投げる throw文を使い、強制的に例外を発生させる a.チェック例外(IOException)を投げる void methodA throws IOException { if(a == null){ throw new IOException(); } } b. 非チェック例外(実行時例外)を投げる void methodB { if(a == null) throw new NullPointerException(); } } 例外クラスのメソッド printStackTrace 例外の名前、例外の発生場所、例外を発生したメソッドに至るメソッド感の連鎖関係 toString() printStackTraceの1行目に当たる文字列 getMessage() エラーメッセージ 独自の例外クラスの作成 既存の例外クラスを継承した例外クラスを作成し、それをthrow文で投げることも出来る。継承できるのはThrowableクラスの継承ツリーにあるクラスのみ。既存の例外クラスを継承しないクラスを独自の例外クラスとして使うことは出来ない。 オーバロード・オーバライドにおける例外の条件 オーバロード 新しい例外や範囲の広い例外を宣言することが出来る オーバライド スーパークラスのメソッドがどんな例外を宣言していても、新たに非チェック例外(実行時例外)を投げることが出来る 新しいチェック例外を投げることは出来ない スーパークラスでの宣言よりも範囲の広いチェック例外を投げてはならない スーパークラスでの宣言よりも範囲の狭いチェック例外を投げても良い スーパークラスでどんな例外を投げていても、例外を投げないようにして良い
https://w.atwiki.jp/kaldy/pages/17.html
例外クラス 例外クラス 説明 ArgumentException 引数に間違いあり InvalidOperationException クラスやメソッドの使用方法に間違いあり NullReferenceException 変数の値がNothing IndexOutOfRangeException (主に配列やコレクション)の範囲外 TimeoutException 時間切れ NotSupportedException 使用できないメソッド等 ApplicationException その他のカスタムエラー
https://w.atwiki.jp/ce00582/pages/5046.html
import java.io.IOException; import java.util.List; import net.reduls.igo.Morpheme; import net.reduls.igo.Tagger; public class pro{ int s,sx; String[] x=new String[100]; public static void main(String[] args){ pro test=new pro(); } pro(){ try { Tagger tagger = new Tagger( "ipadic" ); List Morpheme list = tagger.parse("文字列を解析してみる"); s=0; for(Morpheme morph list ){ s=s+1; x[s]=morph.surface; } } catch(IOException e) { System.err.println(e.getMessage()); //(3) } sx=s; for(s=1;s sx+1;s++){ System.out.println(x[s]); } } }
https://w.atwiki.jp/m_shige1979/pages/1021.html
例外処理 概要 例外処理を行う場合に設定 try-catch-finally !DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http //www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" html xmlns="http //www.w3.org/1999/xhtml" head meta http-equiv="Content-Type" content="text/html; charset=UTF-8" / title テストサイト /title /head body script type="text/javascript" // ![CDATA[ try{ // 継続条件 for(var i = 0;i 10;i++){ if(i = 9){ throw "エラー!"; } // 余りを取得 var data = i % 2; // 0の場合は処理しない if(data == 0){ continue; } document.write("i=" + i + " br / "); } document.write(" br / "); }catch(e){ document.write("★" + e + "★ br / "); }finally{ // 出力1 document.write("Loop End" + " br / "); } // 出力1 document.write("Test Javascript1" + " br / "); end1 // 出力2 document.write("Test Javascript2" + " br / "); //]] /script /body /html
https://w.atwiki.jp/misp/pages/41.html
例外、規格の外角ギリギリに関しては、原則として以下の対応をとります。 ・めがねがない、アンテナがない等、外装要件で規格外になりそうだ →原因が後天的なもの(ドラえもん型)である場合は、経緯についての簡単な説明と、 在りし日の準拠状態の画像を添えていただければよしとします。 →原因が先天的なもの(感性の都合など)の場合は、経緯について納得できる説明を添えてください。 多くの場合特装/ワンオフ/ハンドメイド扱で対処できるかと思われますが、 外見での判別がどうしても困難になる場合は、別系統扱になる可能性があります。 ※頭頂部に猫耳等は、生体部品でなければセーフです。(例:使い魔の発現) ※背部へのパワーパックの露出も、おおむねセーフです(接続部は隠す)。 ・実体を持たない、多脚型だ等で、内装要件で規格外になりそうだ →内容により出来る限り柔軟に対処します。ご一報ください。 万が一規格外になった場合でも、MiSP準拠 にならないだけで、 作中への登場および設定を制限しません。 ・型番が思いつかない →ベースになる標準機がない/ハンドメイド扱/その他の理由 で どうしても型番が思いつかない場合は、最低限固有名か愛称を付与してください。 何かしらの説明をいただければ、こちらで任意の型番付与を試みます。 なお機体が名電工舎系の場合は、[WU]を付与することでこの問題を解決できます。 ・MiSPに準拠しない、別系統のロボやら登場人物、技術用語ははどこに書けばいい? →MiSP準拠機一覧 ではなく、世界について の方に記述してください。
https://w.atwiki.jp/lmes2/pages/114.html
デバッグ・トレース・例外処理 デバッグ デバッグモードを有効にする トレース トレース情報を表示する 例外処理 例外処理 Try~Catch 例外処理 On Error Resume Next
https://w.atwiki.jp/m_shige1979/pages/1234.html
例外処理 try-catch-finally 例外チェックを設定 import java.io.*; class sample04{ public static void main(String[] args){ try{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.print("入力="); String a = br.readLine(); int b = Integer.parseInt(a); System.out.println("出力=" + b); }catch(Exception ex){ System.out.println(ex.toString()); }finally{ System.out.println("終了"); } }} try~catch~finally try チェックする処理を記述 catch 例外時の処理を記述 finally 完了時の処理を記述 throws 例外が発生した場合、呼び出し元のメソッドでチェック import java.io.*; class sample05{ public static void main(String[] args){ try{ int a = input(); System.out.println("出力=" + a); }catch(Exception ex){ System.out.println(ex.toString()); }finally{ System.out.println("終了"); } } public static int input() throws Exception{ InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); System.out.print("入力="); String a = br.readLine(); int b = Integer.parseInt(a); return b; }} メソッド名に throws 例外処理名 で上位のメソッドへ例外ハンドラを渡す throw 例外処理を作成 import java.io.*; class sample06{ public static void main(String[] args){ try{ check(); }catch(sampleException ex1){ System.out.println(ex1.toString()); }catch(Exception ex99){ System.out.println(ex99.toString()); }finally{ System.out.println("終了"); } } public static void check() throws sampleException{ int a = 10; if(a == 10){ throw new sampleException("例外発生"); } }} // 追加例外処理class sampleException extends Exception{ sampleException(String str){ super(str); }} Exceptionを継承することで独自の例外処理を作成出来る throw new 例外処理名で任意に例外処理を起こすことが出来る
https://w.atwiki.jp/non_ikeuchi/pages/47.html
例外 (EXCEPTION) EXCEPTION BEGIN 処理; EXCEPTION WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE( レコードが返されませんでした。 ); WHEN LOGIN_DENIED THEN DBMS_OUTPUT.PUT_LINE( 不正にログオンしようとしています。 ); WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE( それ以外のエラーです。 ); END;
https://w.atwiki.jp/wiki8_anson/pages/28.html
例外を発生させてみる 例外というのは、定義した配列を超えて使用しようとしたり 指定したファイルが存在しないときなどのことを指します このようなプログラムはコンパイルを行うとエラーが発生します コンパイルしたときにException in thread "main" java.・・・・・・ とか表示されるでしょう、つまるところ例外とはこれを指します 以下のサンプルでは配列の範囲を超えています そのため「Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException」 といったエラーが吐き出されるはずです 次からはこれをプログラム中で検出します サンプル class SuperClass { public int x[] = new int[5]; //コンストラクタ public SuperClass(){ System.out.println("スーパークラスのコンストラクタ"); } //メソッド public void Out(int n){ System.out.println("配列の中身は" + x[n]); } } class Sample { public static void main(String args[]) { //サブクラス作成 SuperClass test = new SuperClass(); //サブクラスのメソッド test.Out(10); } } ■戻る