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?
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.
vous n'avez pas terminé votre instruction try
. Vous avez également besoin de except
.
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.