나는 보통 urllib2 예외를 처리하는 방법에 어려움을 겪고있다. 그래서 나는 아직도 배우고있다. 다음은 몇 가지 조언이 필요한 시나리오입니다.coulldb를 사용한 urllib2 예외 처리
나는 로컬 소파 DB 데이터베이스를 가지고 있습니다. 나는 데이터베이스가 있는지 알고 싶다. 즉 "127.0.0.1:5984/database"입니다. 존재하지 않고 "127.0.0.1:5984"에 도달 할 수 있으면 새 데이터베이스를 만들 수 있도록 알고 싶습니다.
1) 내가 타임 아웃을 얻을 수 :
는 여기에 대해 생각하고 몇 가지 경우입니다. "나는 데이터베이스에 도달하지
2) 내 URL이 점에서 잘못은 전적으로 즉, 나는 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를-파이썬 :
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 버전으로 업데이트했습니다. 아이디어는 try가 성공하면 데이터베이스가 존재한다는 것입니다. 예외 처리가 더 의미가 있습니까? – sbartell