[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