IndentationError:意外的unindent为什么???
#!/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
它说:
def translateSeqData(sfname, cdnlen, ttable):
^
IndentationError: unexpected unindent
为什么?我检查了几千次,我找不到问题。我只使用Tabs而没有空格。另外,有时它要求定义类。那好吗?
答案 0 :(得分:61)
因为你有:
def readTTable(fname):
try:
在except
块之后没有匹配的try:
块。每个try
必须至少有一个匹配except
。
请参阅Python教程的Errors and Exceptions部分。
答案 1 :(得分:1)
您没有完成try
声明。你也需要except
。
答案 2 :(得分:0)
此错误实际上可能位于报告错误之前的代码中。请参阅例如,如果您有如下语法错误,您将收到缩进错误。语法错误实际上在“except”旁边,因为它应该在它之后包含“:”。
try:
#do something
except
print 'error/exception'
def printError(e):
print e
如果您将上面的“除外”更改为“except:”,则错误将消失。
祝你好运。答案 3 :(得分:0)
@MaxPython上面的答案缺少“:”
try:
#do something
except:
# print 'error/exception'
def printError(e): 打印e