You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:37:30