2017-02-21 12 views
0

如果發現索引錯誤將字符串傳遞給變量,則分配變量?考慮代碼:如果列表索引超出範圍python error

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是單個列的文本文件與一個序列ID(文本和數字)每行中,所使用從fasta1和fasta2文本文件中提取。

基本上,我想try:每個list命令(a=fasta1[int(l1)]),如果沒有錯誤(編號在範圍內),請爲正常(分配該次迭代變量a和b),但如果沒有,分配「一個」變量一些佔位符文本,如「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

您的縮進是否正確?除了套件外是否還有'''continue'''聲明? – wwii

+0

你是否明白,如果['''continue'''](https://docs.python.org/3/reference/simple_stmts.html#the-continue-statement)被執行,它後面的所有內容都會被跳過,下一次迭代開始? – wwii

+0

我認爲它應該與嘗試/除外匹配? Python不會標記該縮進結構,但它不起作用。如果沒有索引錯誤,我想繼續 – user95146

回答

1

Python的conditional(又名三元組)表達式可以爲你一行。他們經常因缺乏可讀性而受到批評,但我認爲這個例子讀得不錯。

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