类型对象'RestrictionType'没有属性'size'

时间:2013-12-04 17:26:10

标签: python biopython

我今天遇到了这个问题,想要提起它,看看是否有其他人看过它。搜索Google / SO / Biostars并没有把我带到任何地方。

我正在运行一个简单的限制分析(在随机生成的“基因组”上),并得到此错误。如果我单独寻找含酶的切割位点,它适用于每个。但是,当我将它们放入RestrictionBatch时,我在课堂上收到错误:

type object 'RestrictionType' has no attribute 'size'

我提出IPython notebook describing this

版本: - Biopython 1.6.2 - IPython 1.1.0 - Python 2.7.6 / Anaconda 1.8

我也尝试使用Python 3.3和Biopython Git存储库中的latest pull - 同样的错误。

1 个答案:

答案 0 :(得分:1)

这与iPython有关。可以隔离:

from Bio import Restriction as rst

rst.EcoRI

最后一行使用AttributeError: type object 'RestrictionType' has no attribute 'size'崩溃了一个IPython控制台,而它在Python控制台中运行得很好。奇怪的是:

rst.EcoRI.size
getattr(rst.EcoRI, "size")

给出预期的" 6"在IPython控制台中。


这是我的解决方法,即时生成enzimes(在IPython上):

from Bio.Restriction import Restriction as rst
from Bio.Restriction.Restriction_Dictionary import rest_dict, typedict

def create_enzyme(name):
    e_types = [x for t, (x, y) in typedict.items() if name in y][0]
    enzyme_types = tuple(getattr(rst, x) for x in e_types)
    return rst.RestrictionType(name, enzyme_types, rest_dict[name])

rb = create_enzyme("EcoRI") + create_enzyme("MstI")
# Or if you have a long list of restriction enzymes:
# enzyme_list = ["EcoRI", "MstI"]
# rb = reduce(lambda x, y: x + y, map(create_enzyme, enzyme_list))

# Now it works

ana = rst.Analysis(rb, g, linear=True)
ana.with_sites()

Out[43]:

{__main__.EcoRI: [1440,
                  4108,
                  12547,
                  ...