From: Chris Hulan Date: 2010-04-07T00:25:07+09:00 Subject: Re: Custom Exceptions On Apr 6, 10:44 am, Leslie Viljoen wrote: > [Note:  parts of this message were removed to make it a legal post.] > > Hi everyone > > I want to make a custom exception like so: > > class BillRowError < StandardError >     def initialize(field, index) >         @field = field >         @index = index >     end > end > > I'll call this like so: > raise(BillRowError.new(:roamingcalls, @index), "Roaming Calls field > missing") if n.length == 0 > > But now I'd like to be able to modify the string that Ruby prints when the > exception is not rescue'd. I thought I could add this method to the > BillRowError class: > >     def message >         @message + " field: #{@field}, row: #{@index}" >     end > > That almost works but I get a "instance variable @message not initialized" > warning, which means Ruby is not setting @message in my object like I > expected. Making my own message= method doesn't help. > > Can an exception object access and modify the message that gets passed in > the "raise"? The default Exception:initialize is defined to take 1 parameter, a string containing the error message You define different initialize parameters so @message is not getting set as expected Maybe something like: class BillRowError < StandardError def initialize(msg, field, index) super(msg) @field = field @index = index end def message @message + " field: #{@field}, row: #{@index}" end end ... raise(BillRowError.new("Roaming Calls field missing",:roamingcalls, @index), ) if n.length == 0 cheers