2017-02-21 4 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が使用され、1行に1つのシーケンス番号(テキスト及び数字)を有する単一の列のテキストファイルでありますfasta1とfasta2のテキストファイルから抽出します。

基本的には、各リストコマンド(a=fasta1[int(l1)])にエラーがない場合(idは範囲内にある)、通常通り(その反復に対して変数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 

は、このコードはPythonの腕前の私の不足与えられた驚くべきことではありません(上記のコードに統合)かなりない仕事を、行いますが、私はドンなぜか分かりません。プリントアウトにもかかわらず、実際にはテキスト出力はありません...私はこの権利について考えていますか?インデックスにエラーがない場合は、最初にaとbの変数を使用してペアワイズアライメントを行い、テキストをstdoutに出力します。

アイデア?

+0

字下げは正しいですか? except suiteの '' 'continue'''文はありますか? – wwii

+0

あなたは['' '' '' '' ''(https://docs.python.org/3/reference/simple_stmts.html#the-continue-statement)が実行されると、その後のすべてがスキップされ、次の反復が始まりますか? – wwii

+0

私はtry/exceptと一致させるべきだと思いましたか? Pythonはその字下げ構造にフラグを立てませんが、obvは動作しません。インデックスエラーがない場合は続行します – user95146

答えて

1

Pythonのconditional(別名3進)式は、これを1行にすることができます。彼らはしばしば読みやすさの欠如のために批判されていますが、私はこの例が十分に読みやすいと思います。

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 
関連する問題