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 try
moet minstens één overeenkomende except
hebben.
Zie het gedeelte Fouten en uitzonderingenvan de Python-tutorial.
Antwoord 2, autoriteit 8%
je hebt je try
-instructie niet voltooid. Je hebt en except
daar 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