我在下面有这个脚本,它采用加密数据(价格)并将其发送到一个小的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)
答案 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攻击,因此通过一堆请求来垃圾邮件通常会让网站阻止您。