我试图通过用Python编写国际空间站跟踪器来了解python中的异常处理。
我已阅读https://docs.python.org/2/tutorial/errors.html并且发现Handle errors with urllib2很有用,但我很难理解如何让代码继续循环,尽管抛出异常并且我不确定如何进一步研究
我有这个工作代码。它在我的Raspberry Pi上运行了几天,作为一个更大的程序的一部分,当ISS开销时,绿灯会亮起来。但最终会导致错误并且程序停止。我正在寻找一种方法,即使调用错误,程序也能继续。即此函数每10秒调用一次,但如果出现错误,我希望程序在10秒后再次尝试,同时注意错误。
def issPosition(n):
try:
req = urllib2.Request("http://api.open-notify.org/iss-now.json")
response = urllib2.urlopen(req)
obj = json.loads(response.read())
if n == "lat":
return obj['iss_position']['latitude']
elif n == "long":
return obj['iss_position']['longitude']
except urllib2.HTTPError, e:
GPIO.output(24,True)
time.sleep(0.1)
GPIO.output(24,False)
print 'HTTPError = ' + str(e.code)
except urllib2.URLError, e:
GPIO.output(26,True)
time.sleep(0.1)
GPIO.output(26,False)
print 'URLError = ' + str(e.reason)
except httplib.HTTPException, e:
GPIO.output(26,True)
time.sleep(0.1)
GPIO.output(26,False)
print 'HTTPException'
except Exception:
GPIO.output(26,True)
time.sleep(0.1)
GPIO.output(26,False)
import traceback
print 'generic exception: ' + traceback.format_exc()
指针将不胜感激。谢谢。
答案 0 :(得分:0)
我的代码中没有看到任何循环。你是从循环中调用issPosition吗? 如果是,请不要处理此方法中的异常或重新抛出异常。并在循环中处理异常并继续执行。 例如:
while(True):
try:
result = issPosition(12334584)
# Use your result here ....
except:
# Log and continue
continue
**这将永远运行。您可能希望添加额外的逻辑以最终结束循环。