urllib2和循环中的Try / Except

时间:2015-06-30 20:34:31

标签: python urllib2

我试图通过用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() 

指针将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

我的代码中没有看到任何循环。你是从循环中调用issPosition吗? 如果是,请不要处理此方法中的异常或重新抛出异常。并在循环中处理异常并继续执行。 例如:

while(True):
  try:
    result = issPosition(12334584)
    # Use your result here ....
  except:
    # Log and continue
    continue

**这将永远运行。您可能希望添加额外的逻辑以最终结束循环。