[Pharo-project] Improving Pharo's Exception Hierarchy

Stéphane Ducasse stephane.ducasse at inria.fr
Mon Apr 11 21:51:07 CEST 2011


this is a good idea.
Now pay attention that we should restart to work on integrating FS and that the file exception may change.

Stef

On Apr 11, 2011, at 4:10 PM, Sven Van Caekenberghe wrote:

> Hi All,
> 
> I have this idea that I would like to discuss on the next Pharo sprint and maybe start to implement if there is some consensus on it.
> 
> It has been mentioned many times before on this list that Object>>#error: should be replaced by signalling specific Exceptions in as many cases as possible (or where it makes sense). Even today, there was http://code.google.com/p/pharo/issues/detail?id=3987 !
> 
> I think the core system should set the example here, by defining a number of general purpose exceptions and by using them. Going over #error: senders will be a lot of work but can be done in incremental/Pharo steps.
> 
> So I went over the current hierarchy, scanned quickly through their references and some #error: senders by fundamental classes and looked at some other Smalltalks. I came up with the following very rough draft of an extended hierarchy (** marks new exceptions). In between brackets are the instance variables. Of course, we have to discuss about naming, instance variables and opportunities for reuse and inheritance (could be fun). 
> 
> I am no expert on exceptions and would certainly like to learn more. I am probably overlooking some aspects. We have to keep this Smalltalk like, flexible, dynamic, not start mimicing other languages. 
> 
> Any step in this direction will be an improvement over the current situation. Really using them correctly throughout the system will take some time. Defining the hierarchy could be done rather quickly. Refactoring is always possible later on.
> 
> Exception (messageText)
>  Abort
>  Error
>    ArithemticError
>      ZeroDivide (dividend)	
>      FloatingPointException
>      RangeError ** (from, to)
>      NaNError **
>    FileStreamException (fileName)
>      FileDoesNotExistException (readOnly)
>      FileExistsException (fileClass)
>      CannotDeleteFileException
>      FileWriteError
>      FileReadError **
>      FileClosedException **
>      CannotAccessFileException **
>      ReadonlyFileException **
>    MessageNotUnderstood (message, receiver)
>    NonBooleanReceiver (object)
>    OutOfMemory
>    Halt
>      AssertionFailure
>      BreakPoint
>    SyntaxError ** !exists! (input, position)
>      NumberFormatException **
>    HeadlessError **
>    TimedOut ** (object, operation, timeout)
>    VerificationException
>    IllegalOperation ** (operation, object)
>    SizeMismatch (objects)
>    LowMemory ** (percentageFree)
>    SubclassResponsibility ** (message, receiver)
>    NotYetImplemented ** (message, receiver)
>    CannotInstanciate ** (class)
>    ReadOnlyObject ** (object)
>    OutOfFreeSpace ** (object, size)
>    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 ** 
> 
> All feedback is welcome.
> 
> Regards,
> 
> Sven
> 
> 
> 




More information about the Pharo-project mailing list