1

내가 nova.keypairs.create()을 사용하고 있는데 내가 그것을 잘못된 공개 키를 통과, 나는 다음과 같은 얻을 :사용 OpenStack은 노바 예외

BadRequest: Keypair data is invalid: failed to generate fingerprint (HTTP 400) (Request-ID: req-12bc6440-f042-4687-9ee9-d89e7edc260d) 

내가 일을하려고 다음과 분명한 이유 (가 OpenStack은에 고유 한 예외의에 대한 그것은 작동하지 않았다) :

try: 
    nova.keypairs.create(name=keyname, public_key=key) 
except BadRequest: 
    raise cherrypy.HTTPError(400, "Invalid public key") 

어떻게 내 자신의 시도 내에서 문을 제외하고 같은 BadRequest 같은 OpenStack은 특정 예외를 사용할 수 있습니까?

답변

1

노바 패키지에 대한 예외를 가져와야합니다. github for the package을 통해가는, 당신이해야 할 것 같습니다 당신이보고있는 예외가 실제로 자체가 예외 클래스 Invalid에서 서브 클래스 InvalidKeypair 예외이라고

from nova.exception import * 

주의 BadRequest 메시지는 단지 템플릿 텍스트입니다 .

그래서, 당신의 전체 코드는 같은 보일 것이다 : 나는 노바 버전 2.1을 사용하고 있기 때문에 만약 확실하지 않다

from nova.exception import * 
# You can import specific ones if you are confident about them 
try: 
    nova.keypairs.create(name=keyname, public_key=key) 
except InvalidKeypair: 
    raise cherrypy.HTTPError(400, "Invalid public key") 
+0

을,하지만 난'BadRequest에 InvalidKeypair''에서 제외를 변경했다 '('NameError'가'InvalidKeypair'가 정의되어 있지 않다는 것을 알았습니다.) 잘못된 키 쌍이있을 때 에러를 발생시키는 것과는 대조적으로 모든 나쁜 요청을 얻게 될 것이라고 바보스럽게 생각합니다. m) 오래된 버전을 사용하고 있습니다. – MRichards

+1

@MRichards 매우 많은 가능성이 있습니다. 사용하고있는 Nova 버전이 확실하지는 않지만 비슷한 개념이 될 것입니다. 일반적으로 어떤 예외가 발생하는지 이해하는 좋은 방법입니다 (그리고 파일로부터) 일반 exc를 잡는 것입니다 eption을 입력하고'import traceback; print_traceback()'문을 사용하면 예외가 발생할 때까지 전체 경로를 알려줍니다. –

+1

@MRichards 그게 도움이된다면 받아들이지 말고 upvote :) –