簡體   English   中英

字符串索引超出范圍

[英]String Index Out of Range

我正在使用 Pandas 並將信息從 excel 提取到列表中,這部分效果很好,我的列表又回來了,我可以很好地打印出來,沒有 NaN 或錯誤。

但是,當我遍歷它們時,我遇到了字符串索引在第一次迭代后超出范圍的問題,或者當 itr 為 1 時,因為它打印第一個就好了,然后在site = site[itr]行出現錯誤。

由數值組成的站點數組或列表(如果您願意)。 我得到了從 excel 中提取的行數作為稱為 toSend 的索引限制器。

我添加了site = [str(i) for i in site]因為我收到了 int 對象不可下標的錯誤。

我不確定我在哪里左轉,非常感謝任何幫助。

******* 根據要求更新為 MRE *******

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.base import MIMEBase 
from email import encoders 
import pandas as pd
import time
name = ['Michael Jordan', 'General Clark', 'Tony Tiger', 'Alvin Chipmunk', 'Daffy Duck']
eMail = ['thebulls@bull.com', 'general@insurance.com', 'tiger@post.com', 'alvin@chipmunk.com', 'duck@goose.com']
site = [1, 3, 5, 6, 9]
site = [str(i) for i in site]
toSend = 5
print("Count is " + str(toSend))
print("Starting up... Excel Read")
print(name)
print(site)
print(eMail)
time.sleep(2)
itr = 0
for itr in range(toSend):
    print(str(itr))
    name = name[itr]
    eMail = eMail[itr]
    site = site[itr]
    print("\nWe will be sending an email statements to " + str(name) + "\nfor site " + str(site) + "\nat email address "+ str(eMail) + "\n")
    itr = int(itr) + 1
print("Listing Completed")

更新:

這是因為您正在覆蓋變量。

所以name以數組開頭:

name = ['Michael Jordan', 'General Clark', 'Tony Tiger', 'Alvin Chipmunk', 'Daffy Duck']

循環1, name變成字符串(idx = 1)

name = 'Michael Jordan'

循環2, name變成單字母字符串(idx = 2)

name = 'i'

循環 2, name嘗試從單個字母字符串中獲取位置 3,因此字符串索引超出范圍 (idx = 3)

固定示例:

import smtplib 
from email.mime.multipart import MIMEMultipart 
from email.mime.text import MIMEText 
from email.mime.base import MIMEBase 
from email import encoders 
import pandas as pd
import time
name = ['Michael Jordan', 'General Clark', 'Tony Tiger', 'Alvin Chipmunk', 'Daffy Duck']
eMail = ['thebulls@bull.com', 'general@insurance.com', 'tiger@post.com', 'alvin@chipmunk.com', 'duck@goose.com']
site = [1, 3, 5, 6, 9]
site = [str(i) for i in site]
toSend = 5
print("Count is " + str(toSend))
print("Starting up... Excel Read")
print(name)
print(site)
print(eMail)
time.sleep(2)
itr = 0
for itr in range(toSend):
    print(str(itr))
    loop_name = name[itr]
    loop_eMail = eMail[itr]
    loop_site = site[itr]
    print("\nWe will be sending an email statements to " + str(loop_name) + "\nfor site " + str(loop_site) + "\nat email address "+ str(loop_eMail) + "\n")
print("Listing Completed")

- 老的 -

只需將代碼修改為 for 循環,這將減少所需的邏輯並使調試更容易。

name = sI["Name"].values.tolist()
eMail = sI["MailAddress"].values.tolist()
site = sI["MailSite"].values.tolist()
site = [str(i) for i in site]
toSend = sI["Count"].values

print("Count is " + str(toSend))
print("Starting up... Excel Read")
print(name)
print(site)
print(eMail)
time.sleep(2)
itr = 0
for itr in range(len(toSend)):
    print(str(itr))
    name = name[itr]
    eMail = eMail[itr]
    site = site[itr]
    print("We will be sending an email statements to " + str(name) + "\nfor site " + str(site) + "\nat email address "+ str(eMail))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM