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メッセージはそれのためだけのテンプレートテキストです。

だから、あなたの完全なコードのようなものになります。

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

を私はノヴァバージョン2.1を使用しているので、それはだかどうかわからないんだけど、私は 'BadRequestに' InvalidKeypair'から除いて変更する必要がありました'' InvalidKeypair'が定義されていないことを示す 'NameError'がありました。無効なキーペアがあるときだけエラーを発生させるのではなく、古いバージョンを使用しています。 – MRichards

+1

@MRichards非常に可能ですが、使用しているNovaのバージョンはわかりませんでしたが、コンセプトは同様の行になります。一般に、例外がスローされていることを理解するにはどのファイルから)は、一般的なexc 'import traceback;を実行します。 print_traceback() 'ステートメントは、あなたにその例外まで実行の全体のパスを伝えます。 –

+1

@MRichardsそれが助けられたら、受け入れてupvoteを忘れないでください:) –

関連する問題