Saif al Harthi
Saif al Harthi

Reputation: 2974

'module' object is not callable - Bio.IUPAC

When I try,

from Bio.Alphabet import 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

Upvotes: 4

Views: 2647

Answers (2)

Peter Cock
Peter Cock

Reputation: 1614

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/

Upvotes: 1

Ben DeMott
Ben DeMott

Reputation: 3604

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'>

Upvotes: 8

Related Questions