使用Timer调用带参函数warnTime时出现TypeError报错求助
问题原因与解决方法
你的问题出在Timer调用目标函数的方式上:Timer默认只会直接调用你传入的函数,不会自动传递参数,但warnTime必须接收一个i参数,所以触发了TypeError。
下面是几种可行的解决办法:
用
Timer的args参数传参
这是最规范的做法,Timer的第三个参数可以传一个元组,里面放你要传给目标函数的参数:def warnTime(i): i += 1 print(i) t = Timer(20, warnTime, args=(0,)) # 这里把初始值0传给i t.start()用lambda包装函数
通过lambda匿名函数来间接调用warnTime并传入参数:def warnTime(i): i += 1 print(i) t = Timer(20, lambda: warnTime(0)) t.start()给函数参数设置默认值
修改warnTime,给i加默认值,这样即使没传参数也能正常执行:def warnTime(i=0): # 设置默认值0 i += 1 print(i) t = Timer(20, warnTime) t.start()
另外解释下你之前的尝试为什么没用:提前定义i=0只是声明了全局变量,但Timer调用warnTime时并没有把这个变量传递给函数参数;直接调用warnTime(0)本身是正常的,但你的Timer写法没传参,所以还是会触发错误。
内容的提问来源于stack exchange,提问作者bxbr
相关产品推荐
相关产品推荐

