[Biojava-dev] Errors versus Exceptions

PATERSON Trevor trevor.paterson at roslin.ed.ac.uk
Mon May 17 13:58:08 UTC 2010



> Is the problem in the code the fact that errors are used or 
> that they are not declared on the method signatures?

Declaring them would help - but
Even if you declare Errors in the signature, there is nothing to force you to catch them.
So nothing to alert you to the chance that they may be thrown when you are writing code.

public class Demo { 

	public  static void main(String[] args) throws Exception{

      	Demo.demo();
		System.out.println("never reached");

    	}

    	public static void demo() throws Error {
        	throw new Error("kills the runtime");
    	}
}

Compiles OK with or without declaring the throwable - but throws a runtime error.

:. IMHO throwing errors is not very useful to developer 
- they can use them - IF they know the code well enough to know they might be thrown

If Exceptions were used
1. they would HAVE to be dealt with - if a developer just swallows something bad, than that's their responsibility for shitty code ;)
2. like Errors they would be extendable, so real case dataloaders could use their own exception types and decide how to deal with or ignore them

I guess in my background of coding for data access over the wire with jdbc and webservices 
- you need to be aware of the real probability of connection and request failures 
- so explicitly using Exceptions forces the developer to code defensively




> 
> On a more design note I do not like checked exceptions for 
> two reasons. The first is they seem to make more junior 
> developers catch Exception and swallow it. The second is 
> whenever I've been Java coding in the past whenever a checked 
> exception gets thrown (say IOException because of incorrect 
> file permissions) I cannot deal with it which in the past has 
> meant I either forward on the problem or re-throw in an 
> unchecked exception. 
> 
> That said as Scooter mentioned the exception system was 
> rushed out in the hackathon and did not have much work put into it. 
> 
> Andy
> 
> On 17 May 2010, at 13:15, PATERSON Trevor wrote:
> 
> > resending cos of bad headers
> > 
> > ________________________________
> > 
> > From: PATERSON Trevor
> > Sent: 17 May 2010 13:02
> > To: biojava-dev at lists.open-bio.org
> > Subject: Errors versus Exceptions
> > 
> > 
> > Could I ask a quick question about why BJ3 seems to use 
> Errors rather 
> > than Exceptions
> > - maybe this is already documented somewhere on the wiki 
> for BJ3 or 1 - and you can point me there.
> > 
> > Obviously for us dataloading from remote databases we need 
> to have a method to catch connection,sql, datamapping errors etc.
> > We ususally throw DataAccessExceptions when this happens, 
> which wrap any java.net, Ibatis and SQL exceptions.
> > 
> > It is difficult for us to plug in our lazyload over your 
> signatures in 
> > the BJ3 sequence readers, as these don't throw exceptions, 
> because you 
> > seem to use Errors throughout - which dont need to be 
> declared. Infact I cant actually see examples of you catching 
> and responding to thrown errors.
> > 
> > for example the setContents routine of the Sequence Readers 
> throws a  
> > CompoundNotFoundError if there is no mapping for a base - 
> but I can't see what is done with this.
> > 
> > According to the Java Lang Spec, errors are used for 
> "serious problems 
> > that a reasonable application should not try to catch" - 
> but I would 
> > have thought finding an unrecognized base in a sequence was 
> just the 
> > sort of thing that should be thrown and caught and acted 
> on. As error 
> > throwables are not reported in the signature - developers 
> don't have 
> > any clue ( or requirement) that they should be catching and dealing 
> > with errors - which seems a bit dangerous to me... If 
> Exceptions were 
> > thrownrather than Errors that would force the developer to handle 
> > runtime errors
> > 
> > Cheers Trevor
> > 
> > --
> > The University of Edinburgh is a charitable body, registered in 
> > Scotland, with registration number SC005336.
> > 
> > 
> > _______________________________________________
> > biojava-dev mailing list
> > biojava-dev at lists.open-bio.org
> > http://lists.open-bio.org/mailman/listinfo/biojava-dev
> 
> -- 
> Andrew Yates                   Ensembl Genomes Engineer
> EMBL-EBI                       Tel: +44-(0)1223-492538
> Wellcome Trust Genome Campus   Fax: +44-(0)1223-494468
> Cambridge CB10 1SD, UK         http://www.ensemblgenomes.org/
> 
> 
> 
> 
> 
-- 
The University of Edinburgh is a charitable body, registered in
Scotland, with registration number SC005336.





More information about the biojava-dev mailing list