2012-04-20 1 views
13

インデント化エラー:予期しないインデントなしWHY ???IndentationError:unexpected inindent WHY?

#!/usr/bin/python 
import sys 
class Seq: 
    def __init__(self, id, adnseq, colen): 
     self.id  = id 
     self.dna = adnseq 
     self.cdnlen = colen 
     self.prot = "" 
    def __str__(self): 
     return ">%s\n%s\n" % (self.id, self.prot) 
    def translate(self, transtable): 
     self.prot = "" 
     for i in range(0,len(self.dna),self.cdnlen): 
      codon = self.dna[i:i+self.cdnlen] 
      aa = transtable[codon] 
      self.prot += aa 
    def parseCommandOptions(cmdargs): 
     tfname = cmdargs[1] 
     sfname = cmdargs[2] 
     return (tfname, sfname) 
    def readTTable(fname): 
     try: 
      ttable = {} 
      cdnlen = -1 
      tfile = open(fname, "r") 
      for line in tfile: 
       linearr = line.split() 
       codon = linearr[0] 
       cdnlen = len(codon) 
       aa  = linearr[1] 
       ttable[codon] = aa 
      tfile.close() 
      return (ttable, cdnlen) 
    def translateSData(sfname, cdnlen, ttable): 
     try: 
      sequences = [] 
      seqf = open(seq_fname, "r") 
      line = seqf.readline() 
      while line: 
       if line[0] == ">": 
        id = line[1:len(line)].strip() 
        seq = "" 
        line = seqf.readline() 
        while line and line[0] != '>': 
         seq += line.strip() 
         line = seqf.readline() 
        sequence = Seq(id, seq, cdnlen) 
        sequence.translate(ttable) 
        sequences.append(sequence) 
      seqf.close() 
      return sequences  
    if __name__ == "__main__": 
     (trans_table_fname, seq_fname) = parseCommandOptions(sys.argv) 
     (transtable, colen) = readTTable(trans_table_fname) 
     seqs = translateSData(seq_fname, colen, transtable) 
     for s in seqs: 
      print s 

それは言う:

def translateSeqData(sfname, cdnlen, ttable): 
^
IndentationError: unexpected unindent 

WHY?私は何千回もチェックして、問題を見つけることができません。私はタブと空白を使用していません。さらに、クラスを定義するように求められることもあります。それは大丈夫ですか?

+0

'staticmethod'や' classmethod'デコレータを使用していない限り、クラス内のすべてのメソッド/関数にも最初のパラメータとして 'self'が必要です。 – agf

答えて

43

あなたが持っているからです:

def readTTable(fname): 
    try: 

try:ブロック後のマッチングexceptブロックなし。 tryには少なくとも1つの一致が必要ですexcept

PythonチュートリアルのErrors and Exceptionsセクションを参照してください。

+0

もちろん、デュ! – John

+0

tryステートメントを見ていなくても、どうやって知りましたか? – Pacane

+0

@Pacane「編集されたApr 20 at 22:56」のところをクリックすると、編集履歴が表示されます。元のバージョンにはより多くのコードがありました。 – agf

1

tryステートメントを完了していません。あなたにはexceptが必要です。

0

このエラーは、実際にエラーが報告された場所の前のコードにある可能性があります。たとえば、次のような構文エラーがある場合、インデントエラーが発生します。構文エラーは実際には "except"の隣にあります。なぜなら、その後ろに ":"が含まれている必要があるからです。

try: 
    #do something 
except 
    print 'error/exception' 


def printError(e): 
    print e 

「except」を「except」に変更すると、エラーは消えてしまいます。

幸運。

+0

こんにちは。あなたが私の答えと、それが編集される前の質問の元のバージョンを見ると、これは既にカバーされていることがわかります。また、正しく書式設定するには、4つのスペースをコードにインデントする(または編集ボックスの上部にあるコードボタンを使用する)必要があります。 – agf

関連する問題