Forums

Exception Handling

General discussion about Cobra. Releases and general news will also be posted here.
Feel free to ask questions or just say "Hello".

Exception Handling

Postby Charles » Sun Feb 10, 2008 12:29 pm

# to throw an exception:
throw SomeException(arg1, arg2)
throw Exception('my message')

# to declare your own exception class:
class FooException
inherits Exception

def init(message as String)
.init(message, nil)

def init(message as String, innerExc as Exception)
base.init(message, innerExc)

# to catch exceptions:
try
# do some stuff
catch ioe as IOException
print 'I/O error:', ioe
finally
# clean up code

# take action when no exception occurred:
try
# do some stuff
catch ioe as IOException
print 'I/O error:', ioe
success
print 'Murphy must be on vacation'

# catch and throw:
try
# do some stuff
catch
# clean up code in response to error
throw
Charles
 
Posts: 2515
Location: Los Angeles, CA

Re: Exception Handling

Postby Csaba » Tue Feb 12, 2008 1:36 pm

Hi Chuck

Thank you for all your answers about delegtas and events. I move on now to exception handling.

I have a wish concerning variable scope It would be nice if a variable declared in the try scope is also available in the catch scope but maybe it is so? It is a fundamental design flawn in VB. But they can’t change it now since too muck code would break

Further, The possibility to easily catch errors and find where it realy occired it would be nice if some reflection information were more easily available in Cobra compared with VB. If I had these small examples available when I learned to program VB and .NET, I would have saved a lot of time. Very much time

Code: Select all
 def  aMethodShowingSomeCobraWishes
       Try
              # Variable in the try scope  should also be in the catch part
              # it is not like that in VB – a design miss and too late to fix
             var aNumber as float = 5/0
       Catch ex As Exception
              # Variable from the try scope  also avaialble here
              anumber = 0
              # my generic: object method execption handling in VB
              # It would be nice if Cobra had the object
             # and object method name more easily available
             # This is VB code:
             MsgBox("EXCEPTION in " & Me.GetType().Name & "." & _
                   System.Reflection.MethodBase.GetCurrentMethod().Name & ": "  _
                    & ex.Message, MsgBoxStyle.Exclamation)

#########################
      # my generic: moduler method execption handling in VB
      # It would be nice if Cobra had the module and module method name more easily  available 
     var modName as String = ‘SomeModuelName’ # Can’t find this in reflection
     ..........
    Catch ex As Exception
         # This is VB code:
         MsgBox("EXCEPTION in " & modName & "." & _
              System.Reflection.MethodBase.GetCurrentMethod().Name & ": " & _
                     ex.Message,   MsgBoxStyle.Exclamation)

Best regards
Csaba
Csaba
 
Posts: 42

Re: Exception Handling

Postby AlGonzalez » Tue Feb 12, 2008 2:01 pm

I use the following to get Type/Class and Method names:

catch ex as Exception
#
# current method
sf = System.Diagnostics.StackFrame(0)
method = sf.getMethod
print method.declaringType # Type/Class name (will include namespace)
print method.name # Method Name
#
# calling method
sf = System.Diagnostics.StackFrame(1)
method = sf.getMethod
print method.declaringType
print method.name
AlGonzalez
 
Posts: 13
Location: Greenville, SC - USA

Re: Exception Handling

Postby Charles » Thu Feb 14, 2008 2:13 am

Csaba wrote:I have a wish concerning variable scope It would be nice if a variable declared in the try scope is also available in the catch scope but maybe it is so? It is a fundamental design flawn in VB. But they can’t change it now since too muck code would break


Cobra is like Python and unlike C# in that variables are not scoped to their block. So yes, you can do this.

My experience with going back and forth between Python and C# is that implementing methods is much faster and less distracting in Python. However, I then miss C#'s run-time performance, and the use of declarations and typing can speed up refactoring (due to the compiler finding errors as you reorganize the code). Consequently, Cobra is more like C# at a high level and more like Python inside a method.

Csaba wrote:Further, The possibility to easily catch errors and find where it realy occired it would be nice if some reflection information were more easily available in Cobra compared with VB. If I had these small examples available when I learned to program VB and .NET, I would have saved a lot of time. Very much time


Whether in VB or Cobra, can't you just use "exc.stackTrace" to get that? See MSDN System.Exception.StackTrace

Also, try "cobra -d myprog.cobra" to get debugging info as in the filename and line numbers to make that stack trace more useful.

Also, if you can handle a 5-10MB HTML generated report, try "cobra -er -dst myprog.cobra" on a program that is throwing an exception. The -er gives the exception report and the -dst further enhances it to include a "detailed stack trace" which means you get the values of all arguments and locals on every stack frame. Sometimes I really need that info when I'm working on the compiler itself.

You'll note that when you click an object in the report you will jump down in the report to a table for that object with all its properties and their values. Those values may be objects as well which you can click on. Then you can use your browser's Back button to back up.

HTH
Charles
 
Posts: 2515
Location: Los Angeles, CA


Return to Discussion

Who is online

Users browsing this forum: No registered users and 27 guests