VB.netで特定のエラーを発生させる方法

このQ&Aのポイント
  • VB.netのアプリで特定のエラー(System.Net.WebException)をリトライ可能にするPG作成をしていますが、3回を超えても同じエラーが返された場合に例外として発生させたいです。
  • 動的にエラーを発生させる術が分からず、Err.Raiseにて動的にエラーを発生させることができますが、System.Net.WebExceptionを発生させるための引数の数値がわかりません。
  • 以下のサンプルコードでは、3回までリトライし、3回を超えた場合に特定の例外(System.Net.WebException)を発生させています。
回答を見る
  • ベストアンサー

VB.net 任意の例外を発生させるには・・・

いつも参考にさせていただいています。 現在以下の環境にてアプリ作成を行っております。 OS:Windows XP SP2 言語:VB.net 2005 SP1 .netFrameWork SDK ver2.0 質問: 現在作成中のアプリにて、特定のエラー(System.Net.WebException)をCatchし、その動作を3回までリトライ可能にするPG作成を行っております。 但し、3回を超えても同じエラーが返された場合はその特定のエラー(System.Net.WebException)を例外として発生させたいのですが、動的にこの例外を発生させる術が分かりません。 尚、Err.Raiseにて動的にエラーを発生できるようですが、 System.Net.WebExceptionを発生させる為の引数の数値が 分かりません。 以下、サンプルを記述します。 ご存知の方、宜しくお願いします。 dim RetryCount as Integer Do While Not accessWeb(・・・) RetryCount += 1 If RetryCount <= 3 Then 'ログ出力("WebAccess失敗の為、リトライします。(" & RetryCount & "/3回目)") Else 'ログ出力("WebAccess失敗の為、異常終了。" ) ※※※※※ここで例外(System.Net.WebException)を発生させアプリを終了させたい。※※※※※ End If Loop Private Function accessWeb(・・・) As Boolean Try 例外(System.Net.WebException)が発生する可能性のある処理 Return True '正常終了時 Catch ex As System.Net.WebException Return False '例外発生 End Try

質問者が選んだベストアンサー

  • ベストアンサー
  • kaz-5919
  • ベストアンサー率26% (45/170)
回答No.1

自分で例外を発生させるのは「throw」ですね ここら辺を読めばわかるとおもいますよ。 http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet15/vb6tonet15_03.html

参考URL:
http://www.atmarkit.co.jp/fdotnet/vb6tonet/vb6tonet15/vb6tonet15_03.html
helppppppu
質問者

お礼

ありがとうございました。 解決しました。 throw new 例外名・・

関連するQ&A

  • VB2015 例外処理について

    Windows10、VS2015 Community上で、 以下の文で例外処理が発生しました。 PctureBox1.Image.Save("C:fileName.png) この処理は、PictureBox1.Image に画像を内製したものを一度HDDに保存し、 すぐにこのFileを読み込み、別の用途に供するために使います。 これを何度か繰り返していると、以下の例外処理(添付画像1)が発生して、 処理は中断されます。私には、この画像から例外の理由を判断することは 出来ませんでした。 そこで、例外処理を以下のように設けました。 Try PctureBox1.Image.Save("C:fileName.png) Catch ex As Exception System.Console.WriteLine(ex.Message) End Try この結果、処理は、継続され結果的には正しく終了しました。 ただし、例外処理を捕捉した時のMSGは以下の通りです。 'Plan2016.vshost.exe' (CLR v4.0.30319: Plan2016.vshost.exe): 'C:\WINDOWS \Microsoft.Net\assembly\GAC_MSIL\System.Drawing.resources \v4.0_4.0.0.0_ja_b03f5f7f11d50a3a\System.Drawing.resources.dll' が読み込まれました。 モジュールがシンボルなしでビルドされました。 ということで、例外処理を挿入したことにより、処理は最後まで出来ましたが、 このままで終了するには、寝覚めが悪いです。 考えられる問題と、これを回避する方法をご教授頂きたくお願いいたします。

  • 例外処理に関して

    質問なのですが、よろしくお願い致します。 ファイルに空白行があった場合、任意に例外を発生させることをしているのですが、 (例外処理内容:ファイルにログを出力する) 例外が2回キャッチされているようで、2回目にファイル(ログファイル)は既に開かれています。というエラーが出ますが、以下のソースでは、呼出元と呼び出されたメソッドともに例外を処理してしまうのでしょうか? また、どう改善したらいいでしょうか? ご教授よろしくお願い致します。 呼出元 public Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick Try    Dim cls As New testClass cls.timer1() Catch e as Exception 'ログファイル出力 End Try End Sub 呼び出されるメソッド Public Sub Timer1() try FileOpen(1,"ファイルパス",OpenMode.Input) if Trim(LineInput(1)) = "" Then FileClose(1) Throw New Exception End If Catch e as Exception    'ログファイル出力 End Try End Sub

  • strutsで例外発生

    Strutsを使用してWebアプリケーションの開発を行っていますが、例外発生時の振る舞いについて教えてください。 あるメソッドで例外が発生した場合に、catchでnullを返して、 呼び元では戻り値がnullかどうかをチェックするという方法をとっています。 nullを返す場合はシステムエラーである為、そのままExceptionを返してエラー画面に遷移させればいいのにと思うのですが、一般的にnullを返すというやり方が正しいのでしょうか? ちなみに、呼んだメソッドがnullの場合に特別な処理はしていません。

    • ベストアンサー
    • Java
  • null 参照の例外が実行時に発生する可能性があります

    VB初心者です。色々調べてみたのですが分からなくて、ヒントでも結構ですので教えていただけないでしょうか。 現在VB.Net2003 からVB2005に移行しているのですが下記の関数で現在開いているフォームを調べていますがVB.Net2003だとなんら問題なかったのにVB2005では「関数 'FormIsLord_Tag' は、すべてのコード パス上では値を返しません。結果が使用されるときに、null 参照の例外が実行時に発生する可能性があります。」という警告が出てしまいます Function FormIsLord_Tag(ByVal GetTag As String) As Form Dim LoopForm As Form Try For Each LoopForm In Forms If LoopForm.Tag = GetTag Then Return LoopForm End If Next Catch ex As Exception MessageBox.Show(ex.ToString) End Try End Function If LoopForm.Tag = GetTag Then とかの前にLoopFormがNothingだったらとか色々やってみましたがわからなくて・・・ 警告なので動かないって訳ではないのですが・・・ よろしくお願いします。

  • VB2008: 独自例外とは?

    独自例外の確認ための質問をします。 独自例外の発生をキャッチして表示する術がわからなくて苦肉の策でエラートラップを利用。 しかし、こういう事であれば何も独自例外を設定する必要がありません。 と思ったり、「スルーだからテストに<0除算>を選んだのが悪いのか?」と考えたり。 ともかく、判っているのか判っていないのかが判らない状態に陥っています。 そういうことで、独自例外について少し教えて頂ければ幸いです。 ' ============================== ' クラスプログラミング; 演習2 ' ============================== Module theClass   Sub Main()     On Error GoTo Error_Main     Dim T1 As New TEST1     Debug.Print(T1.MembersLengthAverage.ToString) Exit_Main:     Exit Sub Error_Main:     ErrorMsg(Err.Description & "(Main)")     Resume Exit_Main   End Sub End Module ' ================================================================== ' クラス TEST1 ' ================================================================== <Serializable()> Public Class TEST1   Private _MemberCount As Integer   Private _Member1 As String   Private _Member2 As String    ReadOnly Property MembersLengthAverage() As Integer     Get       If _MemberCount <> 0 Then         Return (_Member1.Length + _Member2.Length) \ _MemberCount       Else         Throw New System.Exception("TEST1: 除算エラーが発生しました。" )       End If     End Get   End Property   Public Sub New()     _Member1 = ""     _Member2 = ""   End Sub End Class

  • 例外処理がまったくわかりません!!

    下のプログラミングについていくつか質問があります。 (1)etest()メソッドってなんですか? (2)存在しないファイルを開くってどういうことですか? (3)FileReader( )対応catch節、Close( )対応catch節ってなんですか? (4)あと、プログラミングあとの本の解説の部分がよくわかりません。抜粋してみます。 「一般的な例外クラスはxxxExceptionというクラス名をしています。このタイプの例外クラスはみな「Exception例外クラス」をスーパークラスにしています。この場合、「catch(Exception e)」を使うとすべてのxxxException例外を補足できるという仕様になっています。ですから下のetest( )メソッドは次のように、ひとつのcatch節で記述することができます。このようにしても表示される4エラーメッセージ(eで指示)は、正しく発生例外(FileNotFoundExceptionまたはIOException) 対応のものになります。」 public static void etest( ) { try { // try節を書く FileReader fr = new FileReader("xfile.txt"); } catch (FileNotFoundException e) { // FileReader( )対応catch節 System.out.println("例外1: " + e); // 例外情報を表示 return; // 戻る } catch (IOException e) { // Close( )対応catch節 System.out.println("例外2: " + e); // 例外情報を表示 return; // 戻る } System.out.println("ファイルは正しくオープンされました"); } } よろしくお願いします。

    • ベストアンサー
    • Java
  • 例外時のエラーについて

    お世話になっております。 小さい会社のプログラマ(初心者)です。 意見を聞ける人もいなく、手探りで開発している状況なので、意見をお聞かせ願いたいと思っております。 .NetFrameworkのエラーメッセージ 「アプリケーションのコンポーネントでハンドルされていない例外が発生しました。[継続]をクリックするとアプリケーションはこのエラーを無視し、続行しようとします。[終了]をクリックすると、アプリケーションは直ちに終了します。・・・」 は、.NetFrameworkが親切心で出しているメッセージであってシステム会社の作ったシステムで出して良いメッセージじゃないと思っているのですが、どうでしょう? .NetFrameworkのエラーメッセージでは続行もでき、不完全なまま続行されると非常にまずいと思います。 せっかくTry~catchがあって例外クラスも作成できるのであれば、例外クラスでメッセージを表示してログを出すなりシステムを落とすなりするほうが絶対に良いと思っています。(本にもそう書かれていますし) それとも、これも色々手段がある中の一つの手なんでしょうか? 皆様にとっては超常識な質問だとは思いますがご回答お願いします。

  • C# 例外が発生しないことの保障

    Javaと比較して書きます。 Javaで記述した場合: public class JavaClass {  public static SampleClass s = new SampleClass(); } C#で記述した場合: public class CSharpClass {  public static SampleClass s = new SampleClass(); } JavaでもC#でも、同じコードを記述しているように見えますが、Javaではnew SampleClass()コンストラクタで例外が発生しない事が分かっているのに対して、C#の場合では例外が発生しないとは言い切れません。 これは、Javaでは、例外をスローする可能性のあるメソッド宣言では、その全てについてthrows宣言をしなければいけないのに対して、C#にはこの制約が存在しないことが原因です。 これについて何が困るかといいますと、C#で、static宣言な変数や静的コンストラクタで安易にメソッド呼び出し等を行うと、キャッチできなくなってしまいます。 public class Exceptionner {  public Exceptionner()  {   throw new ApplicationException("Exceptionnerクラスの例外");  } } public class SampleClass {  public static Exceptionner e = new Exceptionner(); // ここで例外が発生するが、キャッチできない。 } public class MyEntryPoint {  public static void Main()  {   try   {    SampleClass s = new SampleClass();   }   catch (Exception e)   {    // System.ApplicationExceptionでなくSystem.TypeInitializationExceptionとなる。    // つまり、元の例外の情報は失われている    Console.WriteLine(e.GetType());   }  } } これを現在漠然と問題視していますが、何かよい解決策はありませんでしょうか。 望んでいる解決策: ・C#でもメソッドが例外を返さないという保障がソースレベルでメソッドやコンストラクタに宣言可能? ・C#では例外をちゃんとキャッチしなくてもスマートに記述することが可能? ・問題視する必要がない?(whyも含めて)

  • ファイルをクローズしたい

    visual studio 2010 vb.netでの質問です。OpenTextFileWriter での書き込み処理時、エラーが発生した場合、Try,Catch ,FinallyのFinallyの部分でファイルをクローズしたいと思い以下のコードを書きましたが警告 「変数 'tw' は、値が割り当てられる前に使用されています。Null 参照の例外が実行時に発生する可能性があります。」が発生してしまいます。ファイルを必ずクローズしたい(エラーが発生しても、しなくても)と思うのですが、どのようにコードを書けばうまくいくのでしょうか。お教えいただけるとありがたいです。 Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click Dim wfileNamePath As String Dim data As String Dim tw As System.IO.TextWriter wfileNamePath = "C:\test\test.txt" Try data = "abcd" tw = My.Computer.FileSystem.OpenTextFileWriter(wfileNamePath, True, System.Text.Encoding.Default) tw.WriteLine(data) Catch ex As Exception MsgBox("エラー発生") Finally tw.Close() End Try End Sub End Class

  • phpの例外処理がエラーをトラップしてくれない。

    以下のように例外処理を記述しした場合、 try{ //ここでエラー } catch (Exception $e){ $ErrorMsg="その他エラー:".$e->getMessage(); } tryの中で、0除算によるエラーが発生してもエラーをトラップして、例外 処理のcatchに飛びません。 どのように記述すればエラーをトラップできるのでしょか?

    • ベストアンサー
    • PHP

専門家に質問してみよう