[Biopython] Translation of partial codons

Fields, Christopher J cjfields at illinois.edu
Thu Mar 21 17:56:59 UTC 2013


On Mar 21, 2013, at 12:19 PM, Peter Cock <p.j.a.cock at googlemail.com>
 wrote:

> On Thu, Mar 21, 2013 at 5:10 PM, Iddo Friedberg <idoerg at gmail.com> wrote:
>> Suggstions so far:
>> 1. Raise an exception. This may cause  code running on existing data to
>> change behavior. I.e. it ran before well on bad length sequences, but as of
>> the new code installtion, things will break.
> 
> Yes, but in most cases this will be a good thing. The minority of people
> knowingly dealing with partial sequences can make this explicit by first
> ensuring their sequence is a multiple of three in length (by padding or
> cropping as most appropriate to their use case).
> 
>> 2. Add a default length_check=True to the translate method. Again, this may
>> cause exiting code to behave differently wiht the same data once user
>> upgrades. Unless the user explicitly changes the call to
>> myseq.translate(length_check=False)
> 
> A sensible approach to making likely errors explicit, with an easy work-around
> for the old implicit truncation. The downside is yet another argument to the
> translate functions/methods, which are already pretty complicated. I prefer (1).
> 
>> 3. My suggestion: use length_check=False as default. Code behaves the same
>> as before, so no data-induced breakages. If the user wants to check length,
>> the explicitly pass a True value. So we give the option of checking length,
>> and retaining code-behavior legacy.
>> 
>> length_check, being an argument, does not need to be passed explicitly.
> 
> I don't like this, even though it is backwards compatible for the corner
> case. I think the old behaviour is a bug.
> 
> Regards,
> 
> Peter

That's basically the approach we took on the bioperl end, e.g. the old behavior was an unintended bug (it was a little more complex than that in reality, but in essence it boils down to that).  It was too magic, and the old behavior can be regained with a parameter setting.  I don't think we throw an exception, but maybe we should...

Anyway, I would think going with something that would be following the tenant of least surprise would be very python-esque :)

chris






More information about the Biopython mailing list