2017-12-15 16 views
-2

私が含まれている例のように 'test.txtの' ファイルがあります:このリストインデックスが範囲外になるのはなぜですか?

-- 
a 
-- 
b 
-- 
c 

と私のPythonコード:

x = ['a','b','c'] 
i=1 
with open("test.txt", "r") as fin: 
    with open("result.log", "w") as fout: 
     for line in fin: 
      if line.startswith(' --'): 
       fout.write(line.replace(' --','use {}'.format(str(x[i-1])))) 
       i+=i 
      else: 
       fout.write(line) 

をしかし、結果は次のとおりです。

fout.write(line.replace(' --','use {}'.format(str(x[i-1])))) 
IndexError: list index out of range 

が動作するべき...誰も私を助けることができますか?私は結果持っているしたいと思います:0に初期化i

use a 
a 
use b 
b 
use c 
c 
+5

おそらく 'ので、(I - 1)> = LEN(x)'は。インデックスを使用しようとする前にそれが本当かどうかをチェックしていないことを考えると、なぜこれが驚くべきのかは明らかではありません。また、 'i + = i'は少し疑わしいようです。デバッグを試しましたか? – jonrsharpe

+0

トーマスありがとう、そうです、私はこのことに注意を払っていませんでした... –

+0

あなたの最後の質問にコメントしていません(https://stackoverflow.com/questions/47814761/python-write-txt-file-with- a-list):インプリメンテーションでインデックスを作成していた方法が間違っていて、リストを適切に一致させることができず(Index out of boundsエラーが発生する)受け入れられた答えはあなたのためにその問題を解決するはずです。 – BoboDarph

答えて

0

をして、ループ内でも1で、それをインクリメントし、あなたはformat()があなたのためにそれをしないので、str()を呼び出す必要はありません。これを試してみてください:result.logに書き込ま

x = ['a', 'b', 'c'] 
i = 0 

with open("test.txt", "r") as fin, open("result.log", "w") as fout:  
    for line in fin: 
     if line.startswith(' --'): 
      fout.write(line.replace(' --','use {}'.format(x[i]))) 
      i += 1 
     else: 
      fout.write(line) 

出力:

use a 
a 
use b 
b 
use c 
c 
1

Pythonのインクリメント演算子は、それは常に私をインクリメントこのi+=1のように見えるが、あなたはi+=iを使用しようとされて=私に

を+

i = 1の場合、増分i = 2の後

i = 2の場合、incrementmenの後t i = 4

あなたは3つの要素を配列に持つので、エラーインデックスは怒りから外れます。

0

i+=iが例外の原因です。あなたが使用することができます。

i = 0 
// code goes here 
i += 1 
関連する問題