Dale, I think I understand some of your points, there based on valid concerns. We should end up with a minimal set of exceptions. The current set was not that large IMHO. But here and there some simplifications are possible.
Thanks for submitting a concrete alternative hierarchy. However, it feels as if the reasons between using a class and a selector are a bit arbitrary. I can't make sense out of it. Another thing that hasn't been discussed so far is what data should go in each exception. This has to be done on a blackboard with a couple of people. And it won't be finished in one go either, far from it. I'll print out your hierarchy as well ! Sven On 14 Apr 2011, at 18:07, Dale Henrichs wrote: > 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>
