运行python json达到设定的时间后出现键错误

时间:2017-12-12 19:50:33

标签: python json

我在下面有这个脚本,它采用加密数据(价格)并将其发送到一个小的led标志,问题是脚本会运行一段时间,但后来我得到了关键错误:'价格'停止剧本,奇怪的是'价格'每次都有效。我现在每分钟使用一个cron作业来运行脚本,但我觉得有一种更简单的方法可以做到这一点。如果我收到错误,有没有办法再次运行/重置脚本?这是一个覆盆子pi,所以没有物理方法让我重新启动它而不将其重新插入电视,我显然不想要。非常感谢您的帮助!

#!/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)

1 个答案:

答案 0 :(得分:1)

您的一个请求很可能是发回一些不同的查看数据(或者可能是超时),所以在尝试返回价格之前先进行检查。

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攻击,因此通过一堆请求来垃圾邮件通常会让网站阻止您。