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

如何用Python基于列表输入发送例行邮件及索引越界报错求解

Python例行邮件生成代码报错修复

报错原因

  • 错误1:visitors = visitors.pop(-1)语法误用
    list.pop()方法会返回被移除的元素,你这里将被弹出的quit字符串直接赋值给了visitors变量,原本存储访客信息的列表直接被覆盖为单个字符串,后续对字符串做索引访问必然出现越界问题。这行只需修改为visitors.pop(-1),不需要赋值回visitors。
  • 错误2:循环逻辑错误
    每个访客对应列表中2个元素(姓名、国籍),你用range(len(visitors))遍历会导致最后一次循环时i+1超出列表最大索引。需要将循环步长设置为2,改为for i in range(0, len(visitors), 2)。
  • 错误3:冗余初始化逻辑出错
    你在初始化邮件模板时直接调用了visitors[i],此时的i是你提前定义的初始值1,如果访客列表长度不足2会直接触发越界,且这部分内容后续循环会重复生成,直接删除初始邮件模板中的姓名、国籍两行即可。

修复后完整代码

def visitor():
    visitors = []
    number_of = int(input("你要登记多少位访客?"))
    time = input("访客抵达时间是?")
    comments = """
    请输入第一位访客的姓名,换行输入对应国籍,再输入第二位访客姓名、换行输入对应国籍,直到完成所有访客信息录入
    如果要停止录入并生成邮件内容,输入quit即可
    """
    print(comments)
    name = ""
    while name != "quit":
        name = str(input("请输入内容:"))
        visitors.append(name)
    # 移除最后输入的quit标记
    visitors.pop(-1)
    # 初始化邮件基础内容
    email = f"""
您好:
今日{time}共有{number_of}位访客到访,信息如下:
    """
    # 步长为2遍历访客列表
    for i in range(0, len(visitors), 2):
        to_add = f"""
姓名:{visitors[i]}
国籍:{visitors[i + 1]}
        """
        email += to_add
    ending = "\n烦请批准,谢谢。"
    email += ending
    return email

print(visitor())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 05:57:04