2016-11-04 16 views
0

raise文の後にTrue Valueを返す必要があります。ここで私は文を立てる必要がありますし、真の値を返す必要があります。 finally文を使用すると、例外ブロックが発生しません。最後に使用しないと例外ブロックがraise文で実行され、その後はretcodecmd変数を使用できなくなります。 Pythonでのマイコードの下:raise文の後に戻ることができます

try: 
    something.... 
except ValueError: 
    self._retcodecmd = True 
    raise SomeException(something) 
finally: 
    if self._retcodecmd is True: 
     return True 
    else: 
     return False 

答えて

3

関数からの返り値とバブリング例外は、互いに排他的です。関数を終了することは無意味です。raiseおよびreturnを選択する必要があります。

ここでブロックfinallyreturnを強制し、発生した例外を元に戻します。それがあなたが望んでいない場合は、finallyブロックでオーバーライドされずに例外を伝播させ、呼び出し元で例外を適切に処理する方法を理解する必要があります。

+0

このような状況では、エラーを発生させる必要があり、エラーを発生させた後に他の機能を実行する必要があります。 –

+0

@PranjayKaparuwan:おそらくあなたの戻り値はあまりにも制限されていますか?あなたは 'raise'と' return'を行うことはできませんが、複数の値を返すことができます。最初のものは現在使用しているものと同じで、2つ目は例外が発生した場合 'return True、sys.exc_info() ==(None、None、None) 'などと似ていますが、文脈に適しています。しかし、根本的に、例外と返品は、私が知っているすべての言語で相互に排他的です。例外パスをたどっている場合は、例外伝播をキャンセルせずにリターンパスに従うことはできません。その逆もあります。 – ShadowRanger

+0

@PranjayKaparuwan>あなたの 'finally'節で' return'しないでください。そしてエラーが発生すると、finally節が実行され、エラーが発生します。 – spectras

関連する問題