2012-04-20 9 views
13

IndentationError: inaspettatamente non pertinente PERCHÉ ???IndentationError: inaspettatamente non pertinente PERCHÉ?

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

PERCHE '? Ho controllato migliaia di volte e non riesco a trovare il problema. Ho usato solo Tab e nessuno spazio. Inoltre, a volte chiede di definire la classe. È ok?

+0

Tutti i metodi/funzioni della classe hanno anche bisogno di 'self' come primo parametro, a meno che non si sia utilizzato il decoratore' staticmethod' o 'classmethod'. – agf

risposta

43

E 'perché avete:

def readTTable(fname): 
    try: 

senza una corrispondenza except blocco dopo il blocco try:. Ogni try deve avere almeno uno except corrispondente.

Vedere la sezione Errors and Exceptions del tutorial Python.

+0

Ovviamente, duh! – John

+0

Come lo sapevi, senza nemmeno vedere la dichiarazione di prova ?! – Pacane

+0

@Pacane Se si fa clic su dove viene indicato "modificato Apr 20 alle 22:56", è possibile visualizzare la cronologia delle modifiche. La versione originale aveva più codice. – agf

1

non hai completato la tua dichiarazione try. Hai bisogno e except anche lì.

0

Questo errore potrebbe effettivamente essere nel codice che precede dove viene segnalato l'errore. Vedere il Ad esempio, se si ha un errore di sintassi come di seguito, si otterrà l'errore di indentazione. L'errore di sintassi è in realtà accanto a "except" perché dovrebbe contenere un ":" subito dopo.

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


def printError(e): 
    print e 

Se si modifica "tranne" sopra in "eccetto:", l'errore scompare.

Buona fortuna.

+0

Ciao. Se guardi la mia risposta e la versione originale della domanda prima che fosse modificata, puoi vedere che questo è già stato trattato. Inoltre, è necessario indentare il codice di quattro spazi (o utilizzare il pulsante del codice nella parte superiore della finestra di modifica) affinché venga formattato correttamente. – agf

Problemi correlati