IndentationError: onverwacht unindent WAAROM?

IndentationError: onverwacht unindent WAAROM???

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

Er staat:

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

WAAROM? Ik heb het duizenden keren gecontroleerd en ik kan het probleem niet vinden. Ik heb alleen tabbladen gebruikt en geen spaties. Bovendien vraagt het soms om de klasse te definiëren. Is dat oké?


Antwoord 1, autoriteit 100%

Het is omdat je:

def readTTable(fname):
    try:

zonder een overeenkomend except-blok na het try:-blok. Elke trymoet minstens één overeenkomende excepthebben.

Zie het gedeelte Fouten en uitzonderingenvan de Python-tutorial.


Antwoord 2, autoriteit 8%

je hebt je try-instructie niet voltooid. Je hebt en exceptdaar ook nodig.


Antwoord 3, autoriteit 2%

Deze fout kan zich in de code bevinden die voorafgaat aan waar de fout wordt gerapporteerd. Zie de Bijvoorbeeld, als u een syntaxisfout hebt zoals hieronder, krijgt u de inspringfout. De syntaxisfout staat eigenlijk naast de “behalve” omdat er direct een “:” moet staan.

try:
    #do something
except
    print 'error/exception'
def printError(e):
    print e

Als u “behalve” hierboven wijzigt in “behalve:”, verdwijnt de fout.

Veel succes.


Antwoord 4

@MaxPython Het onderstaande antwoord mist syntaxis ":"

   try:
       #do something
    except:
      # print 'error/exception'
    def printError(e):
        print e

Other episodes