0

私はより大きなスクリプトからのコードを持っていますが、私の人生では、エラーの原因がわかりません。

次のようになります。

counter = 1
for i in range(len(binCounts)):
    thisRatio = float(binCounts[i]) / (float(counter) / float(len(bins)))
    OUTFILE.write("\t".join(bins[i][0:3]))
    OUTFILE.write("\t")
    OUTFILE.write(str(binCounts[i]))
    OUTFILE.write("\t")
    OUTFILE.write(str(thisRatio))
    OUTFILE.write("\n") 

binCounts時系列リストはどこですか[1, 2, 3]

bins は、もう少し情報が含まれている別のリストです。

[['chrY', '28626328', '3064930174', '28718777', '92449', '49911'], ['chrY', '28718777', '3065022623', '28797881', '79104', '49911'], ['chrY', '28797881', '3065101727', '59373566', '30575685', '49912']]

binCounts の変数ごとに、計算されthisRatioた 、 の最初の 3 行bins、および の出力を取得しbinCounts、それらを新しいファイル ( ) にまとめる必要がありますOUTFILE

しかし、これは行っていません。それは私にエラーを与えています:

thisRatio = float(binCounts[i]) / (float(counter) / float(len(bins)))
ZeroDivisionError: float division by zero

行を実行すると:

thisRatio = float(binCounts[i]) / (float(counter) / float(len(bins)))

インタラクティブに、それは正常に動作します。

バラバラに分解すると、次のようになります。

A = float(binCounts[i])
print (A)
49999.0

B = (float(counter))
print (B)
1.0

C = float(len(bins))
print (C)
50000.0

thisRatio
2499950000.0

そして、私はインタラクティブに全体を再実行しました(これは以前は行っていませんでした-1thisRatio行だけです)、このエラーが発生しました...

Traceback (most recent call last):
  File "<stdin>", line 3, in <module>
IndexError: list index out of range

そのため、.py スクリプトとして実行するとエラーは ZeroDivisionError になり、対話的に実行するとエラーは IndexError になるようです。

4

0 に答える 0