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

Discord Bot配置CS 1.6服务器时触发IndexError(list index out of range)问题排查求助

问题分析与解决方案

错误原因

你遇到的IndexError: list index out of range来自database.py的replace_db函数,主要是两个问题导致的:

  1. 空行触发索引访问失败:当database.csv是空文件,或是手动编辑后留下了空行时,csv.reader会把空行解析成空列表[]。此时代码直接访问row[0],自然会触发索引越界错误。
  2. 数据写入逻辑错误:原代码在写回数据库时,只写入了lines[x][0](仅服务器ID),完全丢失了对应的IP地址信息。这不仅会导致后续读取数据不完整,还可能引发其他连锁错误。

修复方案

我们需要修改database.py中的相关函数,处理空行、文件不存在的情况,同时修复数据写入逻辑:

修改后的database.py代码

import discord, csv, os  # 新增os模块用于文件存在性检查
from discord.ext import commands
from discord.ext.commands import bot

class Database(commands.Cog):
    def __init__(self, client):
        self.client = client

    async def read_db(self):
        lines = list()
        # 处理文件不存在的情况
        if not os.path.exists('database.csv'):
            return lines
        with open('database.csv', 'r') as file:
            reader = csv.reader(file)
            for row in reader:
                # 跳过空行,只保留有效记录
                if row:
                    lines.append(row)
        return lines

    async def write_db(self, guild_id, address):
        with open('database.csv', 'a', newline='') as file:
            writer = csv.writer(file)
            writer.writerow([guild_id, address])

    async def replace_db(self, guild_id):
        # 如果数据库文件不存在,直接返回,无需执行删除操作
        if not os.path.exists('database.csv'):
            return
        lines = list()
        guild_id_str = str(guild_id)
        with open('database.csv', 'r') as inp:
            reader = csv.reader(inp)
            for row in reader:
                # 跳过空行,仅保留非当前服务器的有效记录
                if row and row[0] != guild_id_str:
                    lines.append(row)
        with open('database.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            # 完整写入所有保留的行(包含服务器ID和IP地址)
            writer.writerows(lines)

def setup(client):
    client.add_cog(Database(client))

关键修复点说明

  • 文件存在性检查:在read_db和replace_db中先判断文件是否存在,避免空文件或无文件时的读取报错。
  • 空行过滤:遍历CSV行时先判断row是否为空,再进行后续操作,彻底避免空列表的索引访问。
  • 完整数据写入:使用writer.writerows(lines)直接写入所有保留的完整记录,不再丢失IP地址信息。

额外建议

  • 首次运行Bot时,database.csv会自动创建,无需手动生成。
  • 手动编辑数据库文件时,尽量不要留下空行,防止再次触发类似问题。

内容的提问来源于stack exchange,提问作者Rosco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 15:39:05