Wtime函数设置waitTime无法传递至主函数引发TypeError报错求助
解决
time.sleep(waitTime)类型错误:传递整数而非函数对象 这是个很常见的新手坑——你把函数本身当成数值传给time.sleep()了,自然会触发类型错误。咱们一步步理清楚怎么解决:
错误根源
报错TypeError: an integer is required (got type function)直接说明:你传给time.sleep()的不是Wtime函数里设置的整数,而是Wtime这个函数对象本身。大概率你在主逻辑里写了这样的代码:
waitTime = Wtime # 没有加括号,只是把函数的引用赋值给了变量
而不是正确的调用函数获取返回值:
waitTime = Wtime() # 加括号才会执行函数,拿到你设置的等待时长
修正步骤
1. 让Wtime函数返回数值
首先你的Wtime函数必须通过return语句,把内部设置好的waitTime传递出来,比如:
def Wtime(): # 这里替换成你实际设置等待时间的逻辑(比如读取配置、计算时长等) waitTime = 5 # 示例:你想要的等待秒数 return waitTime # 关键:把整数返回给调用者
2. 在主逻辑中正确调用函数
在需要使用等待时间的地方,调用Wtime()获取数值,而不是直接赋值函数名。补全你的代码示例如下:
import RPi.GPIO as GPIO import time GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # 硬件引脚定义 rled = 16 yled = 6 btnOnVal = 12 btnOffVal = 18 ltSense = 21 # 初始化引脚 GPIO.setup(rled, GPIO.OUT) GPIO.setup(yled, GPIO.OUT) GPIO.setup(btnOnVal, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(btnOffVal, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(ltSense, GPIO.IN) def Wtime(): # 这里是你设置waitTime的逻辑,示例写死为3秒 waitTime = 3 return waitTime # 主循环逻辑 try: while True: # 正确调用函数,获取整数类型的等待时间 waitTime = Wtime() # 检测LED开启按钮 if GPIO.input(btnOnVal) == GPIO.LOW: GPIO.output(rled, GPIO.HIGH) time.sleep(waitTime) # 现在传入的是整数,不会报错 GPIO.output(rled, GPIO.LOW) # 检测其他按钮/传感器逻辑... time.sleep(0.1) # 防抖延迟 finally: GPIO.cleanup() # 程序结束后清理GPIO资源
调试小技巧
- 在使用
waitTime前加一句print(type(waitTime)),如果输出是<class 'function'>,说明你确实没调用函数;如果是<class 'int'>或<class 'float'>,才是正确的数值类型。 - 如果
Wtime函数里没有return语句,它默认会返回None,这也会触发类似的类型错误,所以一定要确保函数返回了你需要的数值。
内容的提问来源于stack exchange,提问作者DMan15
相关产品推荐
相关产品推荐

