2017-02-21 66 views
0

Как передать строку переменной, если найдена ошибка индекса? Рассмотрим код:Присвоить переменную, если индекс индекса за пределами диапазона ошибка python

for l1, l2 in zip(open('file1.list'), open ('file2.list')): 
    a=fasta1[int(l1)] 
    b=fasta2[int(l2)] 

    alignments = pairwise2.align.globalxx(a,b) 
    top_aln = alignments[0] 
    aln_a, aln_b, score, begin, end = top_aln 
    print aln_a+'\n'+aln_b 
    outfast1 = aln_a 
    outfast2 = aln_b 

Ряд этих функций должны быть импортированы (pairwise2 выравнивания), но file.lists одиночные колонки текстовые файлы с одной последовательности идентификатора (текст и цифры) в строке, которые используются для извлечения из fasta1 и fasta2 текстовых файлов.

В принципе, я хочу try: каждую команду списка (a=fasta1[int(l1)]), и если нет ошибок (идентификатор находится в диапазоне), сделать в обычном режиме (присвоение переменных а и Ь для этой итерации), но если нет, то назначить «а» переменная некоторые замещающий текст, как «GGG»:

for l1, l2 in zip(open('file1.list'), open ('file2.list')): 
try: 
    a=fasta1[int(l1)] 
except IndexError,e: 
    a="GGG" 
continue 

try: 
    b=fasta2[int(l2)] 
except (IndexError): 
    b="CCC" 
continue 

Этот код не совсем работа (при интеграции с кодом выше), что не удивительно, учитывая мое отсутствие питона доблести, но я не» Знаю, почему. Я действительно не получаю текстового вывода, несмотря на вызовы печати ... Я думаю об этом праве? Если в индексе нет ошибки, я просто хочу, чтобы он продолжался и выполнял парное выравнивание (с первыми переменными a и b), а затем печатал некоторый текст в stdout.

Любые идеи?

+0

Правильно ли вы в отпечатке? Является ли инструкция '' '' '' '' '' '' '' '' '' '' '''''''' – wwii

+0

Вы понимаете, что если ['' 'continue'''] (https://docs.python.org/3/reference/simple_stmts.html#the-continue-statement) выполняется, все после его пропускания и начинается следующая итерация? – wwii

+0

Я думал, что это должно быть согласовано с try/except? Python не отмечает эту структуру отступа, но не работает obv. Я хочу продолжить, если нет индексной ошибки – user95146

ответ

1

Python's conditional (aka trernary) выражения могут однострочно для вас. Их часто критикуют из-за отсутствия читаемости, но я думаю, что этот пример хорошо читается.

a = fasta1[int(l1)] if int(l1) < len(fasta1) else "GGG" 
0

Вам не нужно continue, потому что она будет показывать, что итерации цикла. Учитывайте следующее:

for l1, l2 in zip(open('file1.list'), open ('file2.list')): 
a = 'GGG' 
b = 'CCC' 
try: 
    a = fasta1[int(l1)] 
    b = fasta2[int(l2)] 
except IndexError: 
    pass