You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何触发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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:10:25