2016-08-25 18 views
2

私は例外を再発生させるために次のコードを使用しています。例外を再発生させる点は何ですか?

try: 
    whatever() 
except: 
    raise 

例外を再発生させる目的は何ですか?確かにキャッチされない例外は、とにかくトップに上がるだろうか?すなわち:

try: 
    int("bad") 
except: 
    raise 

が同一の出力を持っていた:

int("bad") 

つまり私は、コンソールにとValueErrorを取得します。

+1

あなたが他のものを行うときに便利です - 例えば、余分なデバッグ情報をプリントアウトするか、クリーンアップファイル – muddyfish

+3

一般的に、あなたは*のみ*例外を再上げないと思いますが。 –

答えて

1

次のコードを想像してみてください。

小さな設定:例えば、膨大な情報のデータベースを管理する責任があり、データの損失は致命的なものになります。

huge_dictionary = {'lots_of_important':['stuffs']} 
try: 
    check_data(new_data) #make sure the data is in the correct format 
    huge_dictionary['lots_of_important'].append(new_data) 
except: 
    data_writer.backup(huge_dictionary) 
    data_writer.close() 
    #and any other last second changes 
    raise 
3

例コードは無意味ですが、失敗した場合にのみ発生するログやクリーンアップを実行する場合は、except:raiseの間に置くことができます。その作業を行い、元の例外正常に泡立っていた。

+0

さて、より低い関数で発生した例外を取り除いて、アプリケーションの処理で何かをもっと上げさせたら、私はtry/exceptを気にすることはできません。 –

+1

@DavidBoard:はい。これはエラーコードを返すことに対する例外の大きな利点です。例外を理解できず、何もできない関数は、それを処理するコードを書く必要がなく、処理できる人が見つかるまでシームレスにバブルアップします。 – ShadowRanger

+0

これは本当の答えです。 'except:raise'(他のコードはありません)は無意味です。しかし、私はそれにかなり遭遇し、本当の失敗点をあいまいにしています。 Pythonの例外的な禅の効果と思われる。 – semiomant

関連する問題