请求与 Raspberry Pi 上的 RGB LED 相关的整数时出错

Error during request for integers relating to RGB LED on Raspberry Pi

我有一个 Raspberry Pi 3,我正在使用 Python 3 编写代码。我在我的代码中添加了一个请求,要求用户输入三个数字来指定 R, G 或 B 打开或关闭(0 = 关闭,1 = 打开)。例如 101 表示 R = 开,B = 关,G = 开。

但是我一直收到错误,我认为这与我使用的 python 版本有关 (Python 3):

TypeError: object of type 'int' has no len()

我在这里关注了一个 youtube 教程:Controlling a RGB LED with a raspberry pi

import time
import RPi.GPIO as GPIO

R = 16
G = 20
B = 21

GPIO.setmode(GPIO.BCM)
GPIO.setup(R,GPIO.OUT)
GPIO.setup(G,GPIO.OUT)
GPIO.setup(B,GPIO.OUT)
GPIO.output(R,GPIO.HIGH)
GPIO.output(G,GPIO.HIGH)
GPIO.output(B,GPIO.HIGH)

def clearCh():
    GPIO.cleanup(R)
    GPIO.cleanup(G)
    GPIO.cleanup(B)

try:
    while True:
        request = input("RGB-->")
        if (len(request) == 3):
            GPIO.output(R, int(request[0]))
            GPIO.output(G, int(request[1]))
            GPIO.output(B, int(request[2]))

except KeyboardInterrupt:
clearCh()

任何能为我指明正确方向的提示都将不胜感激。

请注意,我还尝试了以下操作:if (len(str(request)) == 3): 出现了以下错误:

TypeError: 'int' object has no attribute '__getitem__'

python 内置函数 len() 似乎不适用于整数。所以你可能想要做的是在测量长度之前确保它是一个字符串。

try:
    while True:
        request = str(input("RGB-->"))
        if (len(request) == 3):
        GPIO.output(R, int(request[0]))
        GPIO.output(G, int(request[1]))
        GPIO.output(B, int(request[2]))

except KeyboardInterrupt:
clearCh()

TypeError: object of type 'int' has no len()

似乎input 返回的数据是整数(数据类型),例如您输入的101。您可以尝试将 input 返回的数据转换为字符串(另一种数据类型),但您需要以该格式存储它以对其进行索引。执行 len(str(request)) 只会将 request 中的数据转换为该行代码的字符串,不会影响 request 对象。

try:
    while True:
        request = input("RGB-->")
        request = str(request)
        if (len(request) == 3):
            GPIO.output(R, int(request[0]))
            GPIO.output(G, int(request[1]))
            GPIO.output(B, int(request[2]))

当您将 request 作为等于 101 的字符串数据类型时,则 request[0] 指向最左侧 1request[1] 指向0,依此类推。最后,int() 将这些数字字符串转换为整数数据类型。

此外,不要忘记缩进 if 块下的代码行。


最后,测试您正在使用的数据类型的一个好方法是使用 type() 命令。作为实验(或作为 "sanity check"),您可以在将代码转换为字符串之前和之后将 type(request) 添加到代码中。