2011-04-01 223 views
4

當我嘗試,'模塊' 對象不是可調用 - Bio.IUPAC

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

爲什麼我會遇到以下錯誤:

TypeError: 'module' object is not callable 

PS:這是來自BioPython的食譜爲例

回答

8

在BioPython源代碼中的「SEQ」級位於路徑「/Seq/Seq.py」的文件「Seq.py

含義......你需要輸入序列(文件),這意味着它的「模塊」,然後調用類的「序列」中的「模塊」「序列」

那麼試試這個:

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

如果你曾經在Python感到困惑,你在呼喚你可以做到這一點你導入什麼:

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

通常,當您看到這種模式時,庫作者可能希望您從'Bio.Seq import seq'寫入''。然後像你在問題中那樣使用Seq'類。 – Wesley 2011-04-01 21:56:10

+0

感謝男人:),這幫了我 – 2011-04-01 22:46:35

+0

請注意,自從[此提交](https://github.com/biopython/biopython/commit/6d9d97b6c09c9b01d18d81900ae7d33e0d4694ea)'Seq'已成爲一種新風格的類。所以現在'print type(Bio.Seq.Seq)'會返回''。 – BioGeek 2016-07-28 13:55:25

1

本給了一個很好清晰的答案解釋問題。我猜你複製的例子錯,

>>> 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() 

至少,這就是它現在說http://www.biopython.org/DIST/docs/tutorial/Tutorial.html

注意的是,混亂的原因就可以避免了Biopython使用序列(小寫)的模塊,和Seq(標題大小寫) - 這是現在推薦的Python實踐,請參閱http://www.python.org/dev/peps/pep-0008/

相關問題