簡體   English   中英

Python readlines() 無法在 for 循環中輸出錯誤

[英]Python readlines() doesn't function outputs bug in for loop

簡介:我目前是 Python 初學者學習語法。 我遇到過 python 原生支持的讀取和寫入文件的概念。 在嘗試循環讀取和寫入命令后,我想嘗試一下並找出錯誤。 我想從名稱文件中隨機選擇一個名稱,然后將其寫入一個新文件。 我的文件包含 19239 行名稱,randrange(18238) 從 0 - 18238 生成,並且據說會隨機讀取 1 - 18239 之間的一行。問題是讀寫代碼在沒有 for 循環的情況下工作,但是不是 for 循環。

我的嘗試:

from random import randrange
rdname = open("names.dat", "r")
wrmain = open("main.dat", "a")
rdmain = open("main.dat", "r")

for x in range(6):
    nm = rdname.readlines()[randrange(18238)]
    print(str(randrange(18238)) + ": " + nm)
    wrmain.write("\n" + nm)
...

錯誤代碼:

Exception has occurred: IndexError
list index out of range

rdname.readlines()耗盡您的文件句柄。 第一次運行rdname.readlines()會為您提供行列表,但隨后每次都會返回一個空列表。 顯然,您無法訪問空列表中的元素。 要解決此問題,請在循環之前將readlines()的結果分配給變量一次。

rdlines = rdname.readlines()
maxval = len(rdlines)
for x in range(6):
    randval = randrange(maxval)
    nm = rdlines[randval]
    print(str(randval) + ": " + nm)
    wrmain.write("\n" + nm)

此外,確保您的隨機數只能達到列表的長度是一個好主意。 不需要對列表的長度進行硬編碼len()函數會給你。

我強烈建議你看看如何調試小程序。 使用調試器單步調試代碼非常有用,因為您可以看到每一行如何影響變量的值。 在這種情況下,如果您在每次迭代中查看nm的值,很明顯為什么您會得到IndexError ,並且發現nmreadlines()上變成一個空列表將指向答案的方向.

祝你的編程之旅好運。

readlines()方法。 有一些非直覺的行為。 當您使用readlines()它會“轉儲”文件的全部內容並返回每行的字符串列表。 因此,第二次調用rdname.readlines()[randrange(18238)]rdname文件對象完全為空,實際上您有一個空列表。 因此,從功能[][randrange(18238)]您是在告訴程序在循環的第二次迭代中運行[][randrange(18238)]

我還冒昧地修復了隨機數調用,因為您實現的方式意味着它會在選擇名稱nm = rdname.readlines()[randrange(18238)]並打印所選名稱時調用 2 個不同的隨機數和 linenumber print(str(randrange(18238)) + ": " + nm)

...
rdname = open("names.dat", "r")
wrmain = open("main.dat", "a")
rdmain = open("main.dat", "r")

rdname_list = rdname.readlines()

for x in range(6):
    rd_number = randrange(18238)
    nm = rdname_list[rd_number]
    print(str(rd_number) + ": " + nm)
    wrmain.write("\n" + nm)
...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM