繁体   English   中英

在设置时间段内运行python json后出现关键错误

[英]Key error after running python json for set amount of time

我在下面的脚本中使用了加密数据(价格)并将其发送到一个小的led信号,问题是该脚本将运行一会儿,但随后出现关键错误:“ price”停止了该脚本,奇怪的是“价格”每次都有效一段时间。 我现在正在使用cron作业每分钟运行一次脚本,但是我觉得有一种更简单的方法可以执行此操作。 如果遇到错误,是否可以再次运行/重置脚本? 这是在树莓派上,因此我没有任何物理方法来重新启动它,而无需将其重新插入电视,这显然是我所不希望的。 非常感谢您的帮助!

#!/usr/bin/python
import time, json, requests
from pyledsign.minisign import MiniSign



def btc():
    btcTick= requests.get('https://api.gdax.com/products/BTC-
    usd/ticker') # replace buy with spot_rate, sell etc
    return btcTick.json()['price'] # replace amount with currency etc

def ltc():
    ltcTick= requests.get('https://api.gdax.com/products/LTC-
    usd/ticker') # replace buy with spot_rate, sell etc
    return ltcTick.json()['price']


while True:
    btcUSD = float(btc())
    ltcUSD = float(ltc())

    print btcUSD
    print ltcUSD

mysign = MiniSign(devicetype='sign')

mysign.queuemsg(data='B: ' + '$' + str(btcUSD) +  ' L: ' + '$' + 
str(ltcUSD) , effect="snow", speed=5)
mysign.sendqueue(device='/dev/ttyUSB0', packetdelay=5.0);

time.sleep(60)

您的请求中最有可能的是发回了一些看起来不同的数据(或者可能是超时的),因此只需在尝试返回价格之前进行检查即可。

import time
while True:
    try:
        btcUSD = float(btc())
        ltcUSD = float(ltc())

        print btcUSD
        print ltcUSD
        time.sleep(1)
    except KeyError as e:
      print('Key not found')

如果您想以更花哨的方式处理它,我建议您准确地弄清从请求中返回的内容并从那里返回,因为显然您不会每次都得到相同的消息。 包装try/except只是一种很好的做法,因此无论您如何获得响应,我都会这样做。

try/except也可以防止脚本死亡,因此您不必重新启动它。

大胆强调: 我也建议您在while循环中入睡。 对垃圾邮件充斥大量请求的网站通常会使该网站阻止您,因为您基本上已经编写了DoS攻击。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM