循环中的 urllib2 和 Try/Except
urllib2 and Try/Except in a loop
我正在尝试通过在 Python 中编写国际 Space 站跟踪器来了解 python 中的异常处理。
我已阅读 https://docs.python.org/2/tutorial/errors.html and have found Handle errors with urllib2 有用的内容,但我很难理解如何让代码在抛出异常的情况下继续循环,我不确定如何进一步研究它。
我有这个工作代码。作为一个更大程序的一部分,它在我的 Raspberry Pi 上运行了几天,当 ISS 在头顶时,它会亮起绿灯。但最终,会导致错误并且程序停止。我正在寻找一种方法,即使调用了错误,程序也能继续。 IE。此函数每 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()
不胜感激。谢谢。
我在您的代码中没有看到任何循环。你是从循环中调用 issPosition 吗?
如果是,请不要处理此方法中的异常或重新抛出它。并处理循环中的异常并继续执行。
例如:
while(True):
try:
result = issPosition(12334584)
# Use your result here ....
except:
# Log and continue
continue
** 这将永远 运行。您可能希望添加额外的逻辑以最终结束循环。
我正在尝试通过在 Python 中编写国际 Space 站跟踪器来了解 python 中的异常处理。
我已阅读 https://docs.python.org/2/tutorial/errors.html and have found Handle errors with urllib2 有用的内容,但我很难理解如何让代码在抛出异常的情况下继续循环,我不确定如何进一步研究它。
我有这个工作代码。作为一个更大程序的一部分,它在我的 Raspberry Pi 上运行了几天,当 ISS 在头顶时,它会亮起绿灯。但最终,会导致错误并且程序停止。我正在寻找一种方法,即使调用了错误,程序也能继续。 IE。此函数每 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()
不胜感激。谢谢。
我在您的代码中没有看到任何循环。你是从循环中调用 issPosition 吗? 如果是,请不要处理此方法中的异常或重新抛出它。并处理循环中的异常并继续执行。 例如:
while(True):
try:
result = issPosition(12334584)
# Use your result here ....
except:
# Log and continue
continue
** 这将永远 运行。您可能希望添加额外的逻辑以最终结束循环。