开发者

'module' object is not callable - Bio.IUPAC

开发者 https://www.devze.com 2023-02-21 18:30 出处:网络
When I try, from Bio.Alphabet impor开发者_Go百科t IUPAC from Bio import Seq my_prot = Seq(\"AGTACACTGGT\", IUPAC.protein)

When I try,

from Bio.Alphabet impor开发者_Go百科t IUPAC
from Bio import Seq
my_prot = Seq("AGTACACTGGT", IUPAC.protein)

Why do I encounter the following error:

TypeError: 'module' object is not callable

PS: this is an Example from the BioPython's Cookbook


In the BioPython source code the "Seq" class is located in the file "Seq.py" in the path "/Seq/Seq.py"

Meaning... You need to import Seq (a file) which means its a "Module" and then call the class "Seq" within the 'Module' 'Seq'

So try this:

from Bio.Alphabet import IUPAC
from Bio import Seq
my_prot=Seq.Seq("AGTACACTGGT",IUPAC.protein)

If you are ever confused in Python about what you are importing and what you are calling you can do this:

import Bio.Seq
print type(Bio.Seq)
>>> <type 'module'>
print type(Bio.Seq.Seq)
>>> <type 'classobj'>


Ben gave a nice clear answer explaining the problem. I guess you copied the example wrong,

>>> from Bio.Seq import Seq
>>> from Bio.Alphabet import IUPAC
>>> my_prot = Seq("AGTACACTGGT", IUPAC.protein)
>>> my_prot
Seq('AGTACACTGGT', IUPACProtein())
>>> my_prot.alphabet
IUPACProtein()

At least, that's what it currently says http://www.biopython.org/DIST/docs/tutorial/Tutorial.html

Note that the cause of the confusion would be avoided had Biopython used seq (lower case) for the module, and Seq (title case) for the class - which is now recommended practice for Python, see http://www.python.org/dev/peps/pep-0008/

0

精彩评论

暂无评论...
验证码 换一张
取 消