2011-01-13 7 views
5

それぞれはいつ使用しますか?私は例外を超えている場合は私が使用していることがわかります。私はそれらを得る前に、私は "ifs"を使用して例外をキャッチしているようだ。私のコードの上にifsがあります。"if"を使ってエラーをチェックするべきときと、例外をいつ使うべきですか?

+1

これは無数の時間(2739582、1152541、1313812)を要求されています。この質問の間に、あなたの質問4557577(と疑いなく無数の他人)、あなたの今の* 800以上の質問*、それはあなたが質問スパマーの何かのように思えます。 –

答えて

2

Try catchステートメントは、重大なエラーを処理するために、特に、エラーが発生する可能性があり、時々発生すると予想されるWebサービス、データベース、Webリクエストなどの外部サービスに接続するために設計されています。あなたが良いコードを書いて、ifやternaryのような指定された言語の機能を利用するよりも、例外を処理するのは実行時環境で重くなります。

try catchは防衛の第一線ではなく、防御的なコーディング手法を使用している最後の行です。

1

特に大規模なアプリケーションを扱う場合、例外処理が実際より優れています。あなたが言及したように、あなたは多くのif文を取得しています。 Pythonでは、try/except文を使用すると、例外を処理する標準化された方法を作成できます。例外を使用すると、例外クラスの種類や構築するカスタムクラスの種類を確認できるという利点があります。これは、より構造化されたコーディング方法を提供します。

4

EAFP: Easier to ask for forgiveness than permission.

仮定が偽判明した場合、有効なキーまたは属性とキャッチ例外の存在を前提とするために、共通のPythonのコーディングスタイルです。

これは、Cなどの他の多くの言語に共通LBYL (Look before you leap)スタイルとは対照的で

もちろんの更新1

、あなたが任意のキャッチ例外を処理確保し、ただ静かにそれらを無視してはなりませんそれ以外の場合は、デバッグに多くの時間を費やすことになります! passはおそらくあなたが探しているものではありません!

アップデート2

あなたは、彼らがbuilt-in exceptionsかそうでないかどうかを、raise -dする期待していることを特定の例外をキャッチし必要があります。

+0

私はジェネリックtryを入れました:Exceptione、:print e passそのoKですか? – TIMEX

+0

@TIMEX:ここには一般的な答えはありません。例外をどのように扱うかは、 'raise' -dだったときにどのような処理をしていたかによって異なります。それは 'パス'は非常にまれにあなたが欲しいと言った! – Johnsyweb

+1

例外処理と 'if'文を使用すると、読者はコードの読者にあなたが何が起こるかについて何かを知らせることに気づくはずです。 'if'ステートメントは、条件が' True'か 'False'の大きな可能性があることを意味し、' try'/'except'はエッジケースの扱いを意味します。したがって、EAFPは不変のPythonであるかもしれませんが、あるケースでは解釈の余地があります。また、例外を除いて、一般的な 'except except'を使うことはほとんどありません。 – Wilduck

2

私は多くの人がすでに言ったことを繰り返すないんだけど、私が言及したいのですが、例外を使用しての大きな利点があります:

いくつかのルーチンが失敗した場合、あなたは簡単のどのレベルにを決めることができます間接的には、その例外を処理する必要があります。そして、例えば、各ステップ後にエラーチェックを使ってより深いレベルを膨らませる必要はありません。

もちろん、実行可能なすべてのパスについてすべてを明白にする良いクリーンアップコードを持つ責任から解放されるわけではありません。したがって、リソース、ソケット、コミットまたはロールバックトランザクションなどを解放します。

  • try... finallyブロック、任意の例外が伝播することができますが、前にすべてのものをクリーンアップ(パイソンを含む多くの言語、)、
  • (パイソン特有の)with声明、
  • :そして、それを行うには多くの手段があります
  • デストラクタのクリーンアップを含むRAIIパラダイム(主にC++)。
関連する問題