web-dev-qa-db-ja.com

Pythonで "raise"キーワードを使う方法

私は "raise"の公式な定義を読みましたが、それが何をするのかまだよくわかりません。

簡単に言えば、「レイズ」とは何ですか?

使用例が役立ちます。

227
Capurnicus

2つの目的があります。

yentupは最初のものを渡しました。

それはあなた自身のエラーを引き起こすために使われます。

if something:
    raise Exception('My error!')

もう1つは、例外ハンドラーで current exceptionを再発生させることです。これにより、呼び出しスタックのさらに上に処理できるようになります。

try:
  generate_exception()
except SomeException as e:
  if not can_handle(e):
    raise
  handle_exception(e)
281

エラーを引き起こすために使用されます。

if something:
    raise Exception('My error!')

いくつかの例 ここ

35
jackcogdill

引数なしのraiseはpython構文の特別な用途です。それは例外を取得してそれを再発生させることを意味します。この使用法であれば、reraiseと呼ばれている可能性があります。

    raise

From Python言語リファレンス

式が存在しない場合、raiseは現在のスコープでアクティブだった最後の例外を再発生させます。

引数なしでraiseを単独で使用する場合は、 reraise --ingに厳密に使用されます。別の例外が発生しない状況で実行すると、次のエラーが表示されます。RuntimeError: No active exception to reraise

26
Sohail Si

raise Exception("message")raiseに加えて、Python 3は新しい形式raise Exception("message") from eを導入しました。これは例外チェーンと呼ばれ、元の例外(根本原因)をそのトレースバックで保存することを可能にします。

C#の内部例外と非常によく似ています。

より多くの情報: https://www.python.org/dev/peps/pep-3134/

9
Stan Prokop

raiseは例外を発生させます。他の言語では代わりに動詞 'throw'を使用します。

これはエラー状況を知らせるためのものです。状況が通常のフローに対して例外的であることを示します。

tryexceptの組み合わせを使用して、例外を処理するためのコード 'upstream'(周囲のブロック、またはスタックの前の方の関数)によって、発生した例外を再度キャッチすることができます。

9
Martijn Pieters

エラーチェックの一部としてエラーを発生させるためにそれを使うことができます:

if (a < b):
    raise ValueError()

あるいは、いくつかのエラーを処理してからエラー処理の一部としてそれらを渡します

try:
    f = open('file.txt', 'r')
except IOError:
    # do some processing here
    # and then pass the error on
    raise
8
sampson-chen