Python では、2 つの方法で例外を発生させることができます
raise ValueError
raise ValueError()
後者の場合に例外メッセージを提供できるという事実を除けば、これら 2 つのスタイルの間に根本的な違いはありますか? どちらかを選択する必要がありますか?
ドキュメントから両方が有効です(予期しない動作はありません):
発生させる唯一の引数は、発生する例外を示します。これは、例外インスタンスまたは例外クラス (Exception から派生したクラス) のいずれかである必要があります。
私の意見では、データを保持したい場合は、それがメッセージ(あなたが言ったように)であろうとカスタムデータであろうと何であろうと、インスタンスを使用する必要があります。
@alko が言ったように、インスタンスを指定しないと、引数なしでインスタンス化されます。
必須の引数が必要な場合、これは機能しません。
>>> class MyError(Exception):
... def __init__(self, message, data=None):
... self.msg = message
... self.data = data or {}
...
>>> raise MyError
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: __init__() takes at least 2 arguments (1 given)
コメントを要約すると、違いはありません。いずれの構文も ValueError インスタンスをスローします。ドキュメントからの関連抜粋:
クラスの場合、引数なしでクラスをインスタンス化することにより、必要に応じて例外インスタンスが取得されます。