2012-04-27 3 views
1

Я использую питона и вот кусок моего кода:Ошибка должна быть строка, не генератор в Python

wp = open(outfile, 'w') 
fields = line.split('\t') 
gene_ID = fields[0] 
chr = fields[1] 
strand = fields[2] 
start = int(fields[3]) 
end = int(fields[4]) 
bc = {'A': 'T', 'C': 'G', 'G': 'C', 'T': 'A', 'N':'N'}  
if strand == '+': 
    wp.write(chr_string[start:end]) 
if strand == '-': 
    newstart, newend = -(start + 1), -(end + 1) 
    wp.write(bc[base.upper()] for base in chr_string[newstart:newend]) <--error pointed at this line 

Когда я пытаюсь запустить весь мой код, я получаю следующее сообщение:

TypeError: must be str, not generator 

Кто-нибудь знает, что не так с моим кодом, который подсказывает это?

+2

Ну, это довольно понятно: вы передаете выражение генератора для 'write', когда он ожидает строку ... – Cameron

ответ

5

bc[base.upper()] for base in chr_string[newstart:newend] - выражение генератора. Вам нужно сделать строку из этого, например. join Метод: ''.join(c[base.upper()] for base in chr_string[newstart:newend])

+1

Спасибо! Это то, чего мне не хватало! Нужно ли мне делать это на цепочке == '+'? –

+0

Нет необходимости, 'chr_string [start: end]' - это фрагмент строки, а также строка. –

Смежные вопросы