2014-10-02 5 views
-3
def isexact(pat): 
    for c in pat.upper(): 
     if c not in 'ATGC': 
      return 0 
    return 1 

def print_matches(ofh, enz, matches): 
    if matches: 
     print >>ofh, "Enzyme %s matches at:" % enz, 
     for m in matches: 
      print >>ofh, m, 
     print >>ofh 
    else: 
     print >>ofh, "No match found for enzyme %s." % enz 

def get_site_only(pat): 
    newpat = "" 
    for c in pat: 
     if c.isalpha(): 
      newpat += c 
    return newpat 

def findpos(seq, pat): 
    matches = [] 
    current_match = seq.find(pat) 
    while current_match != -1: 
     matches.append(current_match) 
     current_match =seq.find(pat, current_match+1) 
    return matches 


seq = "" 


ifh = open("C:\Python27\\link_cutzymes.txt",'r') 
ofh = open("C:\Python27\\re-en-output.txt", "w")  

line = ifh.readline() 

while line: 
    fields = line.split() 
    name = fields[0] 
    pat = get_site_only(fields[2]) 

    if isexact(pat): 
     print_matches(ofh, name, findpos(seq, pat)) 
     line = ifh.readline() 
    else: 
     line = ifh.readline() 

ofh.close() 
ifh.close() 

он показывает ошибка индекса списка может помочь мне#list индекс вне диапазона

Traceback (most recent call last): File "C:/Users/ram/Desktop/rest_enz7.py", line 55, in name = fields[0] IndexError: list index out of range

+0

Хорошая вещь здесь является то, что вы получите сообщение об ошибке в строке, которая не показывает в коде. Или, возможно, неправильно скопированы. – Korem

+0

скопируйте ваш фактический код. – WeaselFox

ответ

0

name = fields[0] - вы, вероятно, читаете пустую строку, разделив его, и доступ к нему по индексу 0, что вне диапазона для пустого списка.

вы можете убедиться, что ваш файл содержит только строки вашего формата, проверьте наличие пустых строк в коде или используйте try и except, чтобы назвать несколько вариантов.

0

при чтении данных из файла, если данных не существует для разделения, он не будет преобразован в список. Я могу видеть в вашем коде name = fields [0] вызывает ошибку.

В это время используйте, пожалуйста, за исключением вашего кода.

вы можете переписать код как:

try: 
fields = line.split() 
name = fields[0] 
except: 
pass 
0

string[x] Что делает это получить XTH письмо списка. Это означает, что если в x-й позиции нет объекта, вы получите сообщение об ошибке. Итак, если name = fields[0] возвращает ошибку, то fields должен быть пустым (он будет выглядеть так: []), потому что нет первого объекта (Python отсчитывает от нуля, так что буква 0 - буква 1, буква 1 - буква 2 и так далее). Вы можете исправить это с try: и except:, как так:

try: 
    name = fields[0] 
except: 
    name = '' #Or whatever code you want to run if it fails 

В месте name = fields[0]

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