为何触发List IndexError?账户文件读取与索引问题排查
解决IndexError: list index out of range的问题
嘿,我一眼就看出你这个问题的根源了——是文件读取的指针坑在搞鬼!让我给你拆解清楚:
问题原因
你把打开文件的代码read_file = open("accounts.txt", "r")放在了全局区域,而且每次调用verify()函数时,都会执行account = read_file.readlines()。这里的坑在于:
- 第一次调用
verify()时,readlines()会把文件里的所有6行内容全部读出来,这时候文件内部的读取指针已经移动到了文件末尾。 - 第二次调用
verify()时,再执行readlines(),因为指针已经在末尾了,会直接返回一个空列表。这时候你用acc_no去索引空列表,自然就触发了IndexError: list index out of range。 - 你直接把
acc_no换成2能正常运行,是因为那时候只调用了一次verify(),文件还没被读空;而打印acc_no是2,只能说明变量值没问题,但列表已经空了,两者不冲突哦。
解决方案
最稳妥的办法是一次性把所有账户读出来存在列表里,之后直接用这个列表就好,不用反复读取文件。修改后的代码如下:
import random import time import json import threading import requests from selenium import webdriver from selenium.webdriver.support.ui import Select from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC from selenium.webdriver.common.by import By from colorama import init from colorama import Fore, Back, Style from datetime import datetime init(autoreset=True) config = json.load(open("config.json")) times = int(config['amount']) delay = int(config['verifier_delay']) # 重点:一次性读取所有账户到全局列表,用with语句自动关闭文件 with open("accounts.txt", "r") as read_file: # 用strip()去掉每行末尾的换行符,避免后续处理时带多余字符 accounts = [line.strip() for line in read_file.readlines()] def verify(acc_no): # 先加个判断:如果索引超过账户数量,直接提示错误返回 if acc_no >= len(accounts): print(Fore.RED + f"⚠️ 错误:账户索引{acc_no}超出范围,当前共有{len(accounts)}个账户") return real_account = accounts[acc_no] username = real_account[:real_account.find(":")] password = real_account[real_account.find(":")+1:] print(username + password) print(acc_no) for i in range(times): verify(i) time.sleep(5)
另外还有个小细节:你的times是从config里的amount取值的,如果这个值大于6(你的账户行数),哪怕解决了文件读取的问题,还是会触发索引越界,所以我加了索引判断的逻辑,能提前报错提示,避免崩溃。
如果实在想每次调用都读文件(不推荐,效率低),也可以把打开文件的代码放到verify()函数里,每次调用都重新打开:
def verify(acc_no): with open("accounts.txt", "r") as read_file: account = read_file.readlines() real_account = account[acc_no] # 后续代码不变
额外提醒
读取文件行的时候记得用strip()去掉换行符,不然你拿到的用户名密码可能会带个\n,后续登录或者验证的时候容易出问题哦。
内容的提问来源于stack exchange,提问作者Ogden
相关产品推荐
相关产品推荐

