当使用 python 的 threading.timer 定时执行函数时,若目标函数需要接收参数(如 `warntime(i)`),必须通过 `args` 或 `kwargs` 显式传入;直接写 `timer(20, warntime)` 会导致 typeerror,因 timer 默认不提供任何参数。
在多线程定时任务中,threading.Timer 是一个常用工具,用于延迟执行某个函数。但它的构造签名是:
Timer(interval, function, args=None, kwargs=None)
其中:
- interval:延迟秒数(float);
- function:函数对象本身(不带括号,未调用);
- args:元组或列表,用于按位置传参(如 (0,) 或 [0]);
- kwargs:字典,用于按关键字传参(如 {‘i’: 0})。
你原始代码的问题在于:
t = Timer(20, warnTime) # ❌ 错误:warnTime 被期待接收参数 i,但 Timer 没给
此时 Timer 在 20 秒后调用 warnTime()(无参数),而函数定义为 def warnTime(i):,因此抛出 TypeError: warnTime() missing 1 required positional argument: ‘i’。
✅ 正确做法是显式传入参数: