2012-04-20 5 views
13

IndentationError: unindent inesperado ¿POR QUÉ ???IndentationError: inesperado desenlace ¿POR QUÉ?

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

Dice:

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

POR QUÉ? Lo he comprobado miles de veces y no puedo encontrar el problema. Solo he usado pestañas y no espacios. Además, a veces se pide definir la clase. ¿Eso esta bien?

+0

Todos los métodos/funciones en la clase también necesitan 'self' como su primer parámetro, a menos que haya utilizado el decorador' staticmethod' o 'classmethod'. – agf

Respuesta

43

Es porque tiene:

def readTTable(fname): 
    try: 

sin except bloque de adaptación después del bloque try:. Cada try debe tener al menos un except correspondiente.

Consulte la sección Errors and Exceptions del tutorial de Python.

+0

Por supuesto, duh! – John

+0

¿Cómo lo supo, sin siquiera ver la declaración try? – Pacane

+0

@Pacane Si hace clic donde dice "editado 20 de abril a las 22:56", puede ver el historial de edición. La versión original tenía más código. – agf

1

no completó su declaración try. Necesitas y except allí también.

0

Este error podría estar realmente en el código anterior donde se informa el error. Consulte el Por ejemplo, si tiene un error de sintaxis como el siguiente, obtendrá el error de sangría. El error de sintaxis está realmente al lado del "excepto" porque debe contener un ":" justo después de él.

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


def printError(e): 
    print e 

Si cambia "excepto" arriba a "excepto:", el error desaparecerá.

Buena suerte.

+0

Hola. Si miras mi respuesta y la versión original de la pregunta antes de editarla, puedes ver que ya se ha cubierto. Además, debe aplicar sangría a su código de cuatro espacios (o usar el botón de código en la parte superior del cuadro de edición) para que se formatee correctamente. – agf

Cuestiones relacionadas