例外がエラー戻り値よりも使いにくいシーンの例(説明用)

Go言語は例外がないのでアウトという人が多いわけですが、自分は「例外が取り扱いにくいシーン」というものを経験しているので、その点は実は肯定的なんですよね。

たとえば、コンストラクタで「様々な例外」が発生する時、下手に try の範囲を広げると「予期せぬ場所での例外」まで拾ってしまうので、できればコンストラクタだけを小さく try で囲みたいのです (try の範囲を広げるのであれば System.Exception ではなくて、細かい例外を全部列挙しなければいけない)

しかしながら

Try
    Dim foo = New System.IO.StreamWriter(fname,false,System.Text.Encoding.Default)
Catch ex as Exception
End Try

だと foo が他で参照できなくて困るので、結果として

Dim foo as System.IO.StreamWriter
Try
    foo = New System.IO.StreamWriter(fname,false,System.Text.Encoding.Default)
Catch ex as Exception
End Try

と書かなくてはいけません。でも、これ面倒くさいですよね。結局は

Try
   '*** 事前に書き込むフォルダーが存在するか程度は確認する if 文などは書いておく ***
    Using foo As New System.IO.StreamWriter(fname,false,System.text.Encoding.Default)


    End Using
Catch ex As Exception
    MsgBox(ex.ToString) ' このあたりは本当はもっとちゃんと書いてるので、ツッコミ勘弁
End Try

みたいに書くようになってしまいました。むむむ