38

IndentationError: 予期しない unindent なぜ???

#!/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

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

4

4 に答える 4

99

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

def readTTable(fname):
    try:

exceptブロックの後に一致するブロックがありませんtry:。everytryには少なくとも 1 つの一致する が必要exceptです。

Python チュートリアルのエラーと例外のセクションを参照してください。

于 2012-04-20T03:01:57.393 に答える
8

あなたはあなたのtry声明を完了しませんでした。あなたexceptはそこにも必要です。

于 2012-04-20T03:02:43.680 に答える
2

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

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


def printError(e):
    print e

上記の「except」を「except:」に変更すると、エラーはなくなります。

幸運を。

于 2012-08-10T16:02:28.133 に答える
1

@MaxPython 以下の答えには構文がありません":"

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


    def printError(e):
        print e
于 2020-09-10T21:22:21.550 に答える