0

私は初心者プログラマーで、最終的に 3 つの列の内容を取得して新しいテキスト ファイルに書き込む必要がある Python スクリプトを作成しています。スクリプトをテストすると、エラーが発生し続けます:IndexError: list index out of rangeプルする必要がある 3 番目の列に適用します。

私のコード:

for ip in open("list.txt"):
    with open(ip.strip()+".txt", "a") as ip_file:
        for line in open("data.txt"):
            new_line = line.split(" ")
            if "blocked" in new_line:
                if "src="+ip.strip() in new_line:
                    ip_file.write(", " + new_line[11])
                    ip_file.write(", " + new_line[12])
                    ip_file.write(", " + new_line[14] + "\n")

のいくつかの行でdata.txtは、15 番目の列がありません。エラー メッセージを回避するためにいくつかの方法を試しましたが、それでもエラーが発生します。

if "src="+ip.strip() in new_line:
    ip_file.write(", " + new_line[11])
    ip_file.write(", " + new_line[12])
    if new_line[14] is None:
        pass
    else:
        ip_file.write(", " + new_line[14] + "\n")

if "src="+ip.strip() in new_line:
    ip_file.write(", " + new_line[11])
    ip_file.write(", " + new_line[12])
    if not new_line[14]:
        pass
    else:
        ip_file.write(", " + new_line[14] + "\n")

質問: 列が存在するかどうかを確認し、存在しない場合は無視する別の方法はありますか?

ありがとう!

4

3 に答える 3

2

使用try-except:

ip_file.write(", " + new_line[12])
try:
    ip_file.write(", " + new_line[14] + "\n")
except IndexError:
    pass

実行するif new_line[14] is Noneif not new_line[14]、14番目のインデックスに存在する値を確認しようとしていますが、Pythonではそのようなインデックスがない場合IndexErrorは発生します。

(javascript のような言語undefinedでは、存在しないインデックスに対して返されますが、Python の場合はそうではありません)

于 2013-08-22T13:42:41.223 に答える
0

このエラーはルックアップ自体が原因である ( new_line[14]) ため、 のように行の長さを確認する必要がありますif len(new_line) > 12。もう 1 つのアプローチはIndexError例外の処理です。どちらも適切であり、通常はプログラマーがどちらのアプローチを使用するかを決定できます。「許可ではなく許しを求める」を参照してください-説明

于 2013-08-22T13:42:50.973 に答える