我想通過在Python中編寫國際空間站跟蹤器來了解python中的異常處理。urllib2和嘗試/除了在循環中
我已閱讀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()
指針將不勝感激。謝謝。
睡10秒鐘並記錄錯誤 –
什麼是未捕獲的錯誤? – drolando
我會折射你的代碼,所以你不要重複自己(__DRY__)。重複執行幾行代碼,這將有助於將它放入一個函數中,所以如果您想改變睡眠時間,可以在一個地方而不是3個地方進行更改。另外,您仍然可以在最後一個除外代碼塊中將e作爲Exception來傳遞,並且鑄造成一個字符。最後,通過處理錯誤,它將繼續。沒有其他的事情需要你去做。有一個原因,爲什麼它不喜歡做嘗試/除了一個特定的錯誤。 – rady