web-dev-qa-db-fra.com

IndentationError: indentation inattendue POURQUOI?

IndentationError: indentation inattendue POURQUOI ???

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

Ça dit:

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

POURQUOI? J'ai vérifié des milliers de fois et je ne trouve pas le problème. Je n'ai utilisé que des tabulations et aucun espace. De plus, il demande parfois de définir la classe. Est-ce que ça va?

21
John

C'est parce que vous avez:

def readTTable(fname):
    try:

sans bloc except correspondant après le try: bloquer. Chaque try doit avoir au moins un except correspondant.

Voir la section Erreurs et exceptions du tutoriel Python.

63
agf

vous n'avez pas terminé votre instruction try. Vous avez également besoin de except.

2
Jeff

Cette erreur pourrait en fait être dans le code précédant où l'erreur est signalée. Voir Par exemple, si vous avez une erreur de syntaxe comme ci-dessous, vous obtiendrez l'erreur d'indentation. L'erreur de syntaxe se trouve en fait à côté de "sauf" car elle doit contenir un ":" juste après.

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


def printError(e):
    print e

Si vous remplacez "sauf" ci-dessus par "sauf:", l'erreur disparaîtra.

Bonne chance.

0
MaxPython