KeyError 1 - Остановка после первой строки Excel - PullRequest
0 голосов
/ 18 апреля 2020

Новое в кодировании ... Я уверен, что это будет очевидно, когда вы будете читать дальше.

Я пытаюсь отправить электронные письма для определенных строк в таблице Excel. Это отправляет электронное письмо для первой строки, но оно останавливается.

Я пытался найти ответ в документации pandas, руководствах для YouTube, stackoverflow, книге, которую я читаю "Python Cra sh Курс ". Все безрезультатно.

Мне кажется, что я трачу много времени на поиски ошибок, которые, вероятно, очень просты. Я знаю, что это из-за недостатка опыта, но мне интересно, можете ли вы предложить какие-то основополагающие принципы, которые помогут мне лучше понять, почему скрипт не работает.

Второе, и, вероятно, тем проще, не могли бы вы сказать мне, что я здесь не так сделал. Я считаю, что это связано с неправильной настройкой l oop, но я не смог понять это.

import pandas as pd
import smtplib

your_name = "XXXXXX"
your_email = "XXXXX@gmail.com"
gmail_password = input("Type your password and hit enter:")

# If you are using something other than gmail
# then change the 'smtp.gmail.com' and 465 in the line below

server = smtplib.SMTP_SSL('smtp.gmail.com', 465)
server.ehlo()
server.login(your_email, gmail_password)

recovery_sheet = pd.read_excel(r"C:\Users\xxx\Desktop\PythonSpreadsheetTutorial\Spreadsheet.xlsx")

due_dates = recovery_sheet[["Client", "Staff", "Form Type", "Days Until Due", "Email Address"]]

due_in_10 = due_dates[due_dates["Days Until Due"]==10]

# Get all the Names, Email Addresses, Subjects and Messages
all_clients = due_in_10['Client']
all_staff = due_in_10['Staff']
all_types = due_in_10['Form Type']
all_due_dates = due_in_10['Days Until Due']
all_emails = due_in_10['Email Address']


# Loop through the emails
for idx in range(len(all_emails)):

    # Get each records name, email, subject and message
    client = all_clients[idx]
    staff = all_staff[idx]
    form_type = all_types[idx]
    days_until_due = all_due_dates[idx]
    email_address = all_emails[idx]


# Creating the Subject Heading and Message
    subject = f"The {form_type} Is Due In {days_until_due} Days For {client.upper()}" 
    message = f"Hi {staff.title()}, \n\nThe {form_type} is due in {days_until_due} days for {client.upper()}.  Please turn it in before the due date. \n\nThanks, \n\nJudy"

# Create the email to send
    full_email = ("From: {0} <{1}>\n"
                  "To: {2} <{3}>\n"
                  "Subject: {4}\n\n"
                  "{5}"
                  .format(your_name, your_email, staff, email_address, subject, message))

# In the email field, you can add multiple other emails if you want
# all of them to receive the same text
    try:
        server.sendmail(your_email, [email_address], full_email)
        print('Email to {} successfully sent!\n\n'.format(email_address))
    except Exception as e:
        print('Email to {} could not be sent :( because {}\n\n'.format(email_address, str(e)))

# Close the smtp server
server.close()

Вот ошибка, которую я получаю:

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-13-68c9da5cc87a> in <module>
     11 
     12     # Get each records name, email, subject and message
---> 13     client = all_clients[idx]
     14     staff = all_staff[idx]
     15     form_type = all_types[idx]

~\anaconda3\lib\site-packages\pandas\core\series.py in __getitem__(self, key)
    869         key = com.apply_if_callable(key, self)
    870         try:
--> 871             result = self.index.get_value(self, key)
    872 
    873             if not is_scalar(result):

~\anaconda3\lib\site-packages\pandas\core\indexes\base.py in get_value(self, series, key)
   4403         k = self._convert_scalar_indexer(k, kind="getitem")
   4404         try:
-> 4405             return self._engine.get_value(s, k, tz=getattr(series.dtype, "tz", None))
   4406         except KeyError as e1:
   4407             if len(self) > 0 and (self.holds_integer() or self.is_boolean()):

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_value()

pandas\_libs\index.pyx in pandas._libs.index.IndexEngine.get_loc()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

pandas\_libs\hashtable_class_helper.pxi in pandas._libs.hashtable.Int64HashTable.get_item()

KeyError: 1

Заранее благодарим за любую помощь, которую вы можете предложить!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...