我今天遇到了这个问题,想要提起它,看看是否有其他人看过它。搜索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 - 同样的错误。
答案 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,
...