【问题标题】:KeyError but the data is able to go throughKeyError 但数据能够通过
【发布时间】:2023-02-04 18:07:58
【问题描述】:

我正在使用 Dweet io 来控制我的 Raspberry Pi 的 GPIO 引脚(引用自link

我的脚本与链接中的脚本完全相同(我使用我自己的 URL ofc),但我不断收到 KeyError: 'with'。然而,LED 仍然能够打开和关闭(取决于我输入的 URL)并且它能够打印出 json 代码(“with”非常明显)。正是这个 KeyError 导致我的循环结束,每次我想更新 LED 值时,我都必须再次运行 python 脚本。

My error and what is printed out when i print data

【问题讨论】:

  • 欢迎来到堆栈溢出。请阅读How to Askminimal reproducible example。确保我们可以复制和粘贴代码,不添加或更改任何内容,然后运行它,以便查看精确的问题直接地(即,不包含与问题无关的代码,但包含显示问题所需的一切)。这意味着,代码必须是text, not an image,使用正确的formatting。我们will not transcribe给你一张图片。
  • 接下来,使用相同的文本格式来显示 complete 错误,通过复制和粘贴,从 Traceback (most recent call last): 行开始。你也是expected尝试track down发帖前的问题。例如:你明白什么是KeyError吗?你知道正在使用哪本词典吗?你预计关键是在场?如果是这样,为什么?如果不是,为什么要查找它?
  • 在发布之前要做的另一件重要的事情是阅读并尝试理解错误信息。在这种情况下,您不仅从 Python 获得了一个,而且从 API.您添加了代码以显示返回的 JSON。关于导致失败的 JSON,您是否注意到任何有趣的事情?

标签: python raspberry-pi keyerror dweet.io


【解决方案1】:

看起来您只是读取 URL 的速度太快了,请尝试设置更高的睡眠时间(例如 2s),它应该可以工作

这就是为什么你得到:{"this":"failed","because":"Rate limit exceeded, try again in 1 second(s)."}

import urllib.request
import json
import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(7,GPIO.OUT)

url = "http://dweet.io/get/latest/dweet/for/shantanu"

while True:
    response = urllib.request.urlopen(url)
    data = json.loads(response.read().decode('utf-8'))
    status = data['with'][0]['content']['led']
    print('LED Status = ', status)

    if status == 'on':
        GPIO.output(7,True)
    else:
        GPIO.output(7,False)
    
    time.sleep(2) # You can maybe decrease it a bit (like 1.5)


GPIO.cleanup()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-31
    • 1970-01-01
    • 2020-07-30
    • 2018-11-19
    • 2023-04-03
    • 1970-01-01
    • 2014-12-28
    • 1970-01-01
    相关资源
    最近更新 更多