【问题标题】:Schedule library TypeError: the first argument must be callable调度库 TypeError:第一个参数必须是可调用的
【发布时间】:2021-03-20 07:52:59
【问题描述】:

我正在尝试制作一个在一段时间内(例如每小时)重复发送相同消息的 gmail 机器人。这是我所做的:

import smtplib
import time
import schedule

sender_email = input("enter ur e-mail: ")
rec_email = input("enter receiver e-mail: ")
password = input("enter your password: ")
message = input("enter message\n-")


def thankyou(sender_email, rec_email, password, message):
    server = smtplib.SMTP('smtp.gmail.com', 587)
    server.starttls()
    server.login(sender_email, password)
    print("login successful")
    server.sendmail(sender_email, rec_email, message)
    print("sent")


schedule.every().hour.do(thankyou(sender_email, rec_email, password, message))
while 1:
    schedule.run_pending()
    time.sleep(1)

【问题讨论】:

  • 哪一行导致错误?
  • 请包含错误消息的完整回溯,以便我们准确识别错误。
  • 这就是我得到的错误消息: Traceback(最近一次调用最后一次):文件“C:\Users\user\Projects\email_sender2.0\sender2.py”,第 20 行,在 schedule.every().hour.do(thankyou(sender_email, rec_email, password, message)) 文件“C:\Users\user\venv\lib\site-packages\schedule_init_. py", line 440, in do self.job_func = functools.partial(job_func, *args, **kwargs) TypeError: the first argument must be callable

标签: python smtplib


【解决方案1】:

通过将thankyou(sender_email, rec_email, password, message) 传递给schedule.every().hour.do(),您将使用这些参数传递调用 thankyou结果。由于thankyou 没有返回任何内容,因此您所做的相当于schedule.every().hour.do(None)。你应该传递一个函数,比如一个 lambda 函数,它使用你想要的参数调用 thankyou

schedule.every().hour.do(lambda: thankyou(sender_email, rec_email, password, message))

【讨论】:

  • 好的,谢谢,但现在我写了一条消息并按回车后什么都没有发生。
  • @berke 那一定是一个单独的问题,如果你不能自己解决这个问题,你必须提出一个新问题。对于故障排除步骤,您是否确保 thankyou 立即运行,而不是在运行前等待一个小时?
  • @berke 查看this article 以获取有关调试代码的提示。如果您仍需要帮助,请随时发布新问题。
  • 我把这行改成了schedule.every().second.do(lambda: thankyou(sender_email, rec_email, password, message)),它工作正常。就像你说的那样,它在第一个小时结束时开始工作。谢谢@RandomDavis先生!
【解决方案2】:

是因为你传递schedule.every().hour.do()thankyou()的返回,而不是函数本身,试试:

schedule.every().hour.do(lambda:thankyou(sender_email, rec_email, password, message))

【讨论】:

  • 谢谢。有什么技巧可以让你变得更好,或者这段代码是废话吗?
猜你喜欢
  • 2017-04-04
  • 1970-01-01
  • 2020-08-31
  • 2017-06-27
  • 2019-02-09
  • 2017-05-08
  • 2020-03-08
  • 1970-01-01
  • 2023-01-13
相关资源
最近更新 更多