为什么我得到列表索引错误?

时间:2018-05-20 10:49:40

标签: python

我的文本文件有6行,但每次验证运行两次总是得到:

  File "verifier.py", line 34, in <module>
    verify(i)
  File "verifier.py", line 27, in verify
    real_account = account[acc_no]
IndexError: list index out of range

当我用2替换acc_no时它工作正常,但是当打印出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'])
username = config['username']
password = config['password']
read_file = open("accounts.txt", "r")
acc_no=0

def verify(acc_no):
    account = read_file.readlines()
    real_account = account[acc_no]
    username = real_account[0: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)

先谢谢您提供的任何帮助

4 个答案:

答案 0 :(得分:0)

您已达到account没有acc_no的有效索引的程度。尝试捕获错误并查看这些值实际是什么:

try:
    real_account = account[acc_no]
except IndexError:
    print(acc_no, account)

我认为您会发现帐户不是您认为的那样!

答案 1 :(得分:0)

readlines()函数读取从当前位置到文件末尾的所有行。当您再次拨打verify()时,您已经在文件的末尾,因此没有什么可读的。

您需要先找回文件的开头。

def verify(acc_no):
    read_file.seek(0)
    account = read_file.readlines()
    ...

但是不是重复读取文件,而是只读一次并将其保存在全局变量中。然后,您每次都可以重复使用该变量。

with open("accounts.txt", "r") as read_file:
    account = read_file.readlines()

答案 2 :(得分:0)

您似乎打开read_file一次,然后每次进入verify()函数时尝试使用read_file.readlines()读取其整个内容。

AFAIK,readlines读取整个文件,因此如果不重新打开文件,它将无法再次运行。我错过了什么吗? The docs说:

  

如果要阅读列表中文件的所有行,也可以使用   list(f)或f.readlines()

答案 3 :(得分:0)

当您尝试获取位置本身不存在的位置值时,列表将引发<table width=100% height=100%><tr> <td class="events_column" width=50%> <div id="calendar_events"> <h1>Eventos</h1> Haz click en el evento cuya ubicación quieras ver en el mapa. <div class="events_table_div"> <table class="fancy_table scrollable_table"> <thead> <tr> <th>Evento</th> <th>Fecha</th> <th>Ubicación</th> </tr> </thead> <tbody> {% for each in events %} <tr class="clickable" onclick="{% if 'location' in each %}deleteMarkers(); addMarker('{{each['id']}}');{% endif %}"> <td>{% if 'summary' in each %}{{each['summary']}}{% else %}---{% endif %}</td> <td>{% if 'start' in each %}{{each['start']['date']}}{% else %}---{% endif %}</td> <td>{% if 'location' in each %}{{each['location']}}{% else %}---{% endif %}</td> </tr> {% endfor %} </tbody> </table> </div> <div class="buttons_table_div"> <table class="fancy_table"> <tr class="clickable" onclick="addAllMarker()"><td colspan="3">Mostrar todos los eventos</td></tr> <tr class="clickable" onclick="deleteMarkers()"><td colspan="3">Ocultar todos los eventos</td></tr> </table> </div> </div> </td> <td class="map_column" width=50%> <br> <div id="map" class="map"></div> </td> </tr></table>。所以问题就是

  1. 文件为空
  2. 文件不为空,但您提供的IndexErroracc_no
  3. 中不存在
  4. 如果循环执行两次,account将返回read_file.readlines()一个空列表,则会引发异常。
  5. 现在解决方案就是我的。

    []

    干杯!