1. ホーム
  2. python

[解決済み] raise exception()」と「raise exception」(括弧なし)の違いは何ですか?

2022-10-25 22:13:10

質問

パラメータレス例外を定義する。

class MyException(Exception):
    pass

上げた場合、何か違いがあるのでしょうか。

raise MyException

raise MyException()

が見つかりませんでした。単にオーバーロードされた構文なのでしょうか?

どのように解決するのですか?

簡単に言うと、両方の raise MyExceptionraise MyException() は同じことをします。 この最初のフォームは、例外を自動的にインスタンス化します。

ドキュメントにある関連するセクション にはこうあります。

上げる は最初の式を例外オブジェクトとして評価します。これはBaseExceptionのサブクラスかインスタンスでなければなりません。クラスである場合、例外インスタンスは引数なしでクラスをインスタンス化することによって、必要なときに取得されます。

とはいえ、セマンティクスは同じでも、最初の形式は顕微鏡的に速く、2番目の形式はより柔軟です(必要に応じて引数を渡すことができるため)。

Pythonでほとんどの人が使う通常のスタイル(すなわち、標準ライブラリ、一般的なアプリケーション、および多くの書籍で)は、以下のように raise MyException を使うことです。 例外を直接インスタンス化するのは、引数を渡す必要があるときだけです。 例えば raise KeyError(badkey) .