2017-07-28 15 views
0

私はPythonの初心者ですが、現在コードを実行していますが、次のエラーが発生します。解決するために最善を尽くしましたが、できませんでした。私を助けてください。コードは以下の通りです。pythonを実行中にインデックスエラーが発生しました

Traceback (most recent call last): 
    File "main.py", line 59, in <module> 
    signatures = signature.make(args.in_file, substitution_order=stratton['substitution_order'], out_path = args.spectrum_output) 
    File "/home/ateeqanees/Mutation/centos/mutation-signatures-master/signature.py", line 73, in make 
    if not ref_trinuc[1] == snp[0]: 
IndexError: string index out of range 

が私を助けてください、次のように

continue 
    num_snps_skipped += 1 
    samp_id = sline[id_index] 
    ref_allele = sline[ref_allele_index] 
    tum_allele = sline[tum_allele_index] 
    snp = ref_allele + tum_allele 
    if not snp in transitions: 
     snp = nucleotide_complement[ref_allele] + nucleotide_complement[tum_allele] 
    ref_trinuc = sline[ref_tri_index] 
    if ref_trinuc == "NA": 
     print "Warning: Reference allele not available on "+\ 
       "line %d; skipping line"%line_number 
     continue 
    if not ref_trinuc[1] == snp[0]: 
     print "Warning: Reference allele does not match reference "+\ 
       "trinucleotide; skipping line %d"%line_number** 
     continue 
    snp_with_ctx = ref_trinuc[0] + snp + ref_trinuc[2] 
    if not samp_id in signatures: 
     signatures[samp_id] = [0 for i in substitution_order] 
    if snp_with_ctx not in substitution_order: 
     print "Warning: substitution on line " + \ 
       "%d is %s, not "%(line_number,snp_with_ctx) + \ 
       "found among possible substitutions. Skipping line." 

私はエラーを取得しています。それは大きな助けになるでしょう。

ありがとうございました!!! ダブ

+1

'print'ing' ref_trinuc'と 'snp'を試してください。期待している限り長くはありません。 – AChampion

+0

これは、存在しないリスト要素にアクセスしようとしていることを意味します。上に示唆したように、値を表示するか、pythonデバッガであるpdbについて学んでください。値を調べるには、pdb.set_traceを行73に置き、ステップを実行します。 – user1427026

答えて

0

あなたのref_trinuc文字列には、1文字またはゼロ文字が含まれている可能性があります。だから、if not ref_trinuc[1] == snp[0]:は2番目の文字をつかむためにインデックスエラーを出しています。

その前に、ref_trinucを印刷して何が保持されているのかを確認してください。それはref_trinucは時々2文字未満であると、通常であれば

は、文の場合は、これを試してみてください。

if (len(ref_trinuc) > 1) and (not ref_trinuc[1] == snp[0]):

長さは、この場合には後半が試行されることはありません、1または0である場合なのでインデックスエラーはスローされません。

関連する問題