[Biopython] type object 'RestrictionType' has no attribute 'size'

Christopher J Friedline cfriedline at vcu.edu
Thu Dec 5 01:56:05 UTC 2013


I may have spoken too soon about the notebook specificity - got the same
error when I run .full() on the Analysis object in the ipython console.

On Wed, Dec 4, 2013 at 8:53 PM, Christopher J Friedline
<cfriedline at vcu.edu>wrote:

> Bow,
>
> Thanks for your excellent reply and for taking the time to look - it never
> occurred to me to use the regular (or IPython) REPL - because it's just not
> my way of developing.  I think you're right about it not being a Biopython
> bug, but I think the problems are related to the IPython notebook
> specifically, rather than IPython, in general.  I downloaded the notebook
> and ran it in the ipython console (%run magic), and it completes without
> error.  Good catch - I'll touch base with the IPython folks.
>
> Thanks,
> Chris
>
>
>
> On Wed, Dec 4, 2013 at 7:03 PM, Wibowo Arindrarto <w.arindrarto at gmail.com>wrote:
>
>> Hi Christopher, Peter,
>>
>> Thank you for reporting the issue. After prodding around, I have to
>> say this looks like a very interesting 'bug' :). I'm going to ramble a
>> bit below, so I'll give a short TL;DR first:
>>
>> I don't think this is a bug from Biopython per se, since if you try
>> the same code in a regular Python shell, it works (as Peter has
>> shown). Don't get me wrong,
>> I do appreciate the report in IPython notebook form (I'm a user myself
>> and I think more people should use it, also for reporting bugs like
>> this). But in the context of fixing the problem, I'd suggest that you
>> use a regular Python shell instead.
>>
>> Now, that being said, let's delve in a bit into what's causing the bug
>> (with a small disclaimer: these are my observations and I'm quite sure
>> there are others who know more about this issue).
>>
>> If you see the stack
>> trace of the error, you'd see that a huge chunk is coming from the
>> IPython codebase. Initially I thought this was something of an
>> artifact (I expected the entire stack to trace only Biopython code),
>> but I was wrong. That stack trace really points to the cause of the
>> problem: the way IPython displays cell results in the browser.
>>
>> More specifically, I've pinpointed this problem into the way IPython
>> displays restriction enzymes. You can try it in your same Ipython
>> notebook:
>>
>>    from Bio import Restriction as rst
>>    rst.EcoRI
>>
>> The code above will never fail in a regular Python shell, but will
>> fail in IPython.
>>
>> Why is this the case? I suspect it has something to do with the way
>> Biopython's Restriction module is written. Turns out, there's already
>> some nifty metaclass tricks being employed there that allows a given
>> enzyme to have the class type of itself (e.g. instead of having a
>> RestrictionType class with an instance called EcoRI, we have a
>> metaclass RestrictionType with a class called EcoRI). To keep it
>> short, IPython seems to do an attribute lookup on these metaclasses
>> when it tries to display the object.  You'll notice that on line 333
>> of
>> /data7/cfriedline/anaconda/envs/conda/lib/python2.7/site-packages/IPython/lib/pretty.py,
>> there is an expression that tries to get the class of the object to
>> display:
>>
>>     obj_class = getattr(obj, '__class__', None) or type(obj)
>>
>> However, these metaclasses have not been instantiated into a class and
>> thus do not have any 'size' attribute, IPython complains and raises an
>> error.
>>
>> So to sum up, this behavior may be cause by IPython instead of
>> Biopython. It's perhaps a good idea to mention this in the IPython
>> forum / mailing list, too. They've been doing a very impressive job so
>> far, so I have a hunch this may have popped up in one of their
>> discussions.
>>
>> I have to admit that my metaclass chops are still very limited as
>> these usually aren't required for most Python programming. But if
>> you're interested this SO page
>> (http://stackoverflow.com/questions/100003/what-is-a-metaclass-in-python)
>> has a very easy to follow explanation about what they are and why they
>> are useful.
>>
>> Anyway, that's enough for now I guess :).
>>
>> Cheers,
>> Bow
>>
>> P.S. Peter, perhaps these other Restriction bugs are related with the
>> metaclass? I've never delved that deep into the submodule's codebase,
>> but it looks like there are some very interesting tidbits there.
>>
>> On Wed, Dec 4, 2013 at 5:48 PM, Christopher J Friedline
>> <cfriedline at vcu.edu> wrote:
>> > Hi everyone,
>> >
>> > I ran into this problem today, and wanted to bring it up to see if
>> anyone
>> > else has seen it.  Searching the archives didn't get me anywhere.  I'm
>> > running a simple restriction analysis (on a random genome), and getting
>> > this error. If I look for cut sites with the enzymes individually, it
>> works
>> > for each. However, when I put them into a RestrictionBatch, I get an
>> error
>> > on the class.
>> >
>> > type object 'RestrictionType' has no attribute 'size'
>> >
>> > I put an IPython notebook describing this here:
>> >
>> > http://nbviewer.ipython.org/gist/cfriedline/7790932
>> >
>> > Bio (1.6.2), IPython (1.1.0), Python (2.7.6/Anaconda 1.8)
>> >
>> > Any help is appreciated,
>> >
>> > Thanks,
>> > Chris
>> > _______________________________________________
>> > Biopython mailing list  -  Biopython at lists.open-bio.org
>> > http://lists.open-bio.org/mailman/listinfo/biopython
>>
>
>



More information about the Biopython mailing list