我通常很難確定如何處理urllib2異常。所以我還在學習。這是一個我想要一些建議的場景。urllib2使用couchdb處理異常
我有一個本地沙發db數據庫。我想知道數據庫是否存在。即「127.0.0.1:5984/database」。如果它不存在,我可以達到「127.0.0.1:5984」,我想知道,所以我可以創建新的數據庫。
下面是一些例子我在想:
1)我能得到一個超時。
2)我的網址是錯在這個意義上,我無法達到數據庫完全即我輸入127.0.4.1:5984/database但CouchDB的是127.0.0.1:5984
3)數據庫路徑「數據庫「在沙發數據庫中不存在。
因此,這裏的一些代碼,我寫信給處理:
我要做的就是測試的響應。如果一切正常,我將db_exists設置爲True。我將db_exists設置爲False的唯一時間是如果我得到一個404。其他一切只是退出程序。
request = urllib2.Request(address)
try:
response = urllib2.urlopen(request)
except urllib2.URLError, e:
if hasattr(e, 'reason'):
print 'Failed to reach database'
print 'Reason: ', e.reason
sys.exit()
elif hasattr(e, 'code'):
if e.code == 404:
db_exists = False
else:
print 'Failed to reach database'
print 'Reason: ' + str(e)
sys.exit()
else:
try:
#I am expecting a json response. So make sure of it.
json.loads(response.read())
except:
print 'Failed to reach database at "' + address + '"'
sys.exit()
else:
db_exists = True
我正在遵循URLlib2 The Missing Manual中的異常處理方案。
所以基本上我的問題是...
1)這是處理這個乾淨的,可靠的方法?
2)通常的做法是在代碼中使用sys.exit()。
-Update- 使用CouchDB的 - python的:
main(db_url):
database = couchdb.Database(url=db_url)
try:
database.info()
except couchdb.http.ResourceNotFound, err:
print '"' + db_url + '" ' + err.message[0] + ', ' + err.message[1]
return
except couchdb.http.Unauthorized, err:
print err.message[1]
return
except couchdb.http.ServerError, err:
print err.message
return
except socket.error, err:
print str(err)
return
if __name__ == '__main__':
# note that id did not show it here, but db_url comes from an arg.
main(db_url)
感謝您的意見。我用couchdb-python版本更新了這篇文章。這個想法是,如果嘗試成功,那麼數據庫存在。這裏的異常處理是否更有意義? – sbartell 2010-12-17 20:21:51