2016-08-19 13 views
0

これは以前に尋ねられたかもしれませんが、私は過度に賢いかもしれませんが、自分の検索が空になっています。モジュールが正しいバージョンでない場合、どの例外をスローする必要がありますか?

Python 2.x exceptions pageを見れば、raiseは、私のスクリプトがインポートされたモジュールの__version__が、 cv2は、正しいバージョンではありません。たとえば、私が取り組むスクリプトにはOpenCVバージョン3が必要です。次のブロックの中でraiseの最高の例外は何ですか?

import cv2 
if not cv2.__version__.startswith('3'): 
    raise ValueError('OpenCV _3_ required') 

答えて

2

独自のカスタム例外を作成することができます。あなたはこの例外に何をしたいかに応じて、多くのオプションを持っている

class VersionError(Exception): 
    def __init__(self, msg): 
     Exception.__init__(self,msg) 
+0

ああ、私は自分自身を追加することができます、私はすでに利用可能なものに興味があっただけです。しかし、これも動作します! – bjd2385

+1

これは私にとって過度の気分です。また、 '__init__'を提供することでこれを単純化することもできます。 'class VersionError(Exception):pass'はうまくいくでしょう。(もしあなたが実際に余分なマイルを使いたいのなら、' pass'のisnteadを追加することができます) – mgilson

+0

うまく動作します。しかし、OPは独自のカスタムメッセージを渡していたので、 'msg'パラメータで' __init__'呼び出しを追加するべきだと感じました。 – dunder

2

...一般的に、私は私が考えるかもしれないので、インストールスクリプトが依存関係の適切なバージョンを設定処理するために期待しますこれを単純なランタイムアサーションとして - したがってAssertionErrorが適切かもしれません。

この1つは本当にいいです - あなただけassertif文は必要ありません。

assert cv2.__version__.startswith('3'), 'OpenCV _3_ required' 

私の次の賭けはそれが本当に一般的な例外であることを意味するようRuntimeErrorを使用することです実行時に発生します(通常はキャッチされません)...これは非常に一般的な「ああスナップ、何か悪いことが起こってから回復できない、エラーを吐き出してユーザーに何が起こったかを知らせる」。

+0

ありがとう!これは私が探していたものです – bjd2385

関連する問題