[Biojava-dev] Errors versus Exceptions

Andy Yates ayates at ebi.ac.uk
Mon May 17 14:30:46 UTC 2010


There's something that irks me with checked exceptions & I found code worked better once I went to a fail-fast method of coding but for an API I can see the usefulness of them. 

Wow I think this could be the fastest any group has ever dealt with the Checked/Unchecked exception argument :)

Andy

On 17 May 2010, at 14:58, PATERSON Trevor wrote:

> 
> 
>> 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.
> 
> 
> _______________________________________________
> 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/








More information about the biojava-dev mailing list