【问题标题】:how to fix: "list indices must be integers or slices, not str"如何解决:“列表索引必须是整数或切片,而不是 str”
【发布时间】:2019-09-19 17:52:42
【问题描述】:

我是 python 新手,仍在学习它,我正在尝试制作一个脚本,将电子邮件发送到多个电子邮件,但我遇到了问题。它继续在第 9 行打印出错误:

"列表索引必须是整数或切片,而不是 str"

我对这意味着什么以及我需要做些什么来解决这个问题感到困惑。

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

email_list = ["First@email.com", "second@email.com", "third@email.com", "etc..."]

num = 0
for i in email_list:
    msg['To'] = email_list[i] #this line gives the error
    num = num + 1
    server.sendmail(email, email_list[i], text)

print("Emails Sent: " + num)

我希望输出是,Emails Sent: 3,但它不是大声笑

【问题讨论】:

  • msg['To'] = ... 应该做什么? msg 未定义。
  • msg = MIMEMultipart()

标签: python string for-loop integer


【解决方案1】:

在 python 中,for e in C 必须读作“对于集合 C 的每个元素 e”,这意味着在每次迭代中 e 采用集合 C 的不同元素的值。

在您的示例中,i 将采用值“First@email.com”然后是“second@email.com”等...而不是 0、1... 您似乎相信。 但是,当您执行 email_list[i] 时,您正在尝试获取列表的第 i 个值。这不起作用,因为我们看到 i 是一个字符串。

【讨论】:

  • 我明白你的意思,所以我需要做的就是将 i 更改为字符串?
  • 对不起,我的意思是整数
  • @Merced 你应该直接使用i,它已经拥有你正在寻找的价值。 (而不是email_list[i])。您无需考虑索引等。
  • 我想说,非常感谢您提供的所有这些信息,我只是从这个 convo 中学到了很多东西,但是如何输入呢?就像它的语法是什么。
  • @Merced 第 9 行msg['To'] = i,第 10 行 num = num + 1 第 11 行 server.sendmail(email, i, text)
猜你喜欢
  • 2016-05-25
  • 1970-01-01
  • 2017-10-09
  • 2015-12-09
  • 2021-09-01
  • 2021-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多