0

プログラムを終了する場合に raise を使用するポイントは何ですか? クラッシュが発生するのを許可するのと同じくらい効果的ではないでしょうか?

try-except ブロックを省略した場合、ゼロ除算時に関数がクラッシュし、理由が表示されます。それとも、私が知らない他の用途がありますか?

def div(x,y):
    try:
        return(x/y)
    except ZeroDivisionError as problem:
        raise (problem)
4

3 に答える 3

1

あなたの場合の効果は同じです。ただし、エラーが発生した場合に追加のロジック (クリーンアップなど) を実行し、「データが正しくありません。入力を確認してください」というメッセージのように、元のシステムの低レベル エラーの代わりに別の (おそらくカスタム) エラーを発生させたい場合があります。 . これは、エラーをキャッチして別のエラーを発生させることで実行できます。

于 2013-08-05T00:25:38.523 に答える
1

raise を使用する意味はありません (この場合)。通常、「何か他のこと」を行うコードがいくつかあります。これには、デバッグ情報の出力、ログデータの書き込み、別のパラメーターセットでの操作の再試行などが含まれます。

あなたの場合、例外が発生したときにそれを再発生させるだけの価値があるかどうかはわかりません-誰かが(おそらく)そこに何らかの処理コードを書くつもりだったようですが、それを回避することはできませんでした。

例外処理の使用例のいくつかは、Python Exception Handling Wiki --> http://wiki.python.org/moin/HandlingExceptionsにあります。

于 2013-08-05T00:26:26.587 に答える
0

例外を再発生させる理由は、自分で処理するために何かを行った後で、呼び出しているコードが何であれ、それを処理する機会を与えるためです。たとえば、使用していたファイルを閉じましたが (クリーンアップは美徳であるため)、コードを続行できません。

例外を処理するために何もしない場合は、いいえ、その例外ハンドラーを作成する理由はありません!

例外を再発生させる正しい方法はraise、引数なしで単純に使用することです。このようにして、例外をキャッチした人 (または、誰もキャッチしなかった場合はスクリプトのユーザー) は、例外が最初に発生した場所を示す正しいスタック トレースを取得します。

于 2013-08-05T00:31:14.953 に答える