[Pharo-project] Improving Pharo's Exception Hierarchy

Dale Henrichs dhenrich at vmware.com
Thu Apr 14 20:52:51 CEST 2011


Stef,

For rangeError the code would look like this:

   [
   (NumericError new)
     reason: #rangeError;
     signal: 'access out of bounds'
   ]
     on: NumericError
     do: [:ex |
       ex reasonCode == #rangeError
         ifTrue: [ "do your thang" ]
         ifFalse: [ ex pass ]].

Dale

On 04/14/2011 11:13 AM, Stéphane Ducasse wrote:
> Dale
>
> so it means that I write what?
>
> [] on: NumericError do: [:ex | ]
>
> how do I access the rangeError?
>
>
>>>
>>
>> Using Sven's hierachy as a starting point and taking some cues from the GemStone exception hierarchy, I would suggest the following (names atarting with # are reasonCodes in the namespace of the parent exception class, instead of a unique class):
>>
>> Exception (messageText reasonCode)
>>   Abort
>>   Error
>>     NumericError
>>       #floatingPointException
>>       #rangeError
>>       #naNError
>>       ZeroDivide (dividend)	
>>     FileStreamException (fileName)
>>       #fileDoesNotExistException
>>       #fileExistsException (fileClass)
>>       #cannotDeleteFileException
>>       #fileWriteError
>>       #fileReadError **
>>       #fileClosedException **
>>       #cannotAccessFileException **
>>       #readonlyFileException **
>>     MessageNotUnderstood (message, receiver)
>>     #nonBooleanReceiver (object)
>>     OutOfMemory<  handlers?>
>>     ControlInterrupt
>>       Halt
>>         AssertionFailure
>>       BreakPoint
>>     CompileError
>>       SyntaxError ** !exists! (input, position)
>>         #numberFormatException **
>>     #headlessError **
>>     TimedOut ** (object, operation, timeout)
>>     VerificationException
>>     IllegalOperation ** (operation, object)
>>     #sizeMismatch (objects)
>>     #subclassResponsibility ** (message, receiver)
>>     #notYetImplemented ** (message, receiver)
>>     #cannotInstanciate ** (class)
>>     #readOnlyObject ** (object)
>>     OutOfFreeSpace **<handlers?>
>>     #invalidArgument ** (message, receiver, argument)
>>     #notIndexable ** (object)
>>     #noKeyedAccess ** (object)
>>     #nonIntegerIndex ** (receiver, index)
>>     #subscriptOutOfBounds ** (receiver, index, from, to)
>>     NotFoundException ** (receiver, object)
>>       #keyNotFound **
>>       #valueNotFound **
>>       #elementNotFound **
>>     StreamException (stream)
>>       #positionError ** (index, from, to)
>>       EndOfStream **
>>       #beginOfStream **
>>
>>   Notification
>>     Admonition
>>       LowMemory **<this should be a notification not an error>
>>
>
>




More information about the Pharo-project mailing list