[解決済み] 最近のPythonでカスタム例外を宣言する適切な方法?
質問
現代のPythonでカスタム例外クラスを宣言する適切な方法は何でしょうか?私の主な目標は、他の例外クラスが持っているどんな標準にも従うことであり、(例えば)私が例外に含める余分な文字列は、例外をキャッチしたどんなツールによっても出力されます。
Python 2.5で動作し、Python 2.6とPython 3.*のやり方に「正しい」ものであることを意味します。また、quot;custom" というのは
Exception
このオブジェクトには、エラーの原因に関する追加データ(文字列や、例外に関連する他の任意のオブジェクト)を含めることができます。
Python 2.6.2の以下の非推奨の警告でつまづいた。
>>> class MyError(Exception):
... def __init__(self, message):
... self.message = message
...
>>> MyError("foo")
_sandbox.py:3: DeprecationWarning: BaseException.message has been deprecated as of Python 2.6
というのはおかしいと思う。
BaseException
という名前の属性には、特別な意味があります。
message
. 私は
PEP-352
この属性は2.5では特別な意味を持っていましたが、非推奨にしようとしているので、その名前(とその1つだけ)はもう禁止されているのではないでしょうか?うう。
また、曖昧な認識ですが
Exception
は、何らかのマジックパラメータ
args
しかし、私はその使い方を知りません。私がネットで見つけた多くの議論は、Python 3で引数をなくそうとしていることを示唆していました。
更新:2つの回答が
__init__
であり、かつ
__str__
/
__unicode__
/
__repr__
. 入力が多いようですが、必要なのでしょうか?
どのように解決するのですか?
質問を聞き逃したかもしれませんが、なぜでしょう。
class MyException(Exception):
pass
何かをオーバーライドする(あるいは追加の引数を渡す)には、次のようにします。
class ValidationError(Exception):
def __init__(self, message, errors):
# Call the base class constructor with the parameters it needs
super().__init__(message)
# Now for your custom code...
self.errors = errors
この方法では、2 番目のパラメータにエラーメッセージのディクショ ンを渡し、後でそれを
e.errors
.
Python 2 では、この少し複雑な形式の
super()
:
super(ValidationError, self).__init__(message)
関連
-
Pythonの@decoratorsについてまとめてみました。
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] AndroidでPythonを実行する方法はありますか?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み] Pythonで複数行のコメントを作成する方法はありますか?
-
[解決済み] Python 3で文字列をバイトに変換する最良の方法?
-
[解決済み] Pythonでホームディレクトリを取得するための正しいクロスプラットフォームな方法は何ですか?
-
[解決済み] PythonでHTTP GETを行う最短の方法は何ですか?
-
[解決済み] Pythonで**kwargsを使用する正しい方法
-
[解決済み】Pythonで複数のコンストラクタを持つためのクリーンでPythonicな方法は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Pythonを使って簡単なzipファイルの解凍パスワードを手作業で解く
-
[解決済み】RuntimeWarning: invalid value encountered in double_scalars で numpy の除算ができない。
-
[解決済み】Pythonスクリプトで「Expected 2D array, got 1D array instead: 」というエラーが発生?
-
[解決済み】ImportError: PILという名前のモジュールがない
-
[解決済み】TypeError: re.findall()でバイトのようなオブジェクトに文字列パターンを使用することはできません。)
-
[解決済み】Django: ImproperlyConfigured: SECRET_KEY 設定は空であってはならない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】ValueError: xとyは同じサイズでなければならない
-
[解決済み] 終了までに時間がかかりすぎる場合のタイムアウト機能【重複】について
-
[解決済み] Python 2.6で非推奨となったBaseException.message