1

独自のクラスインスタンスで例外を発生させることは可能ですか? このようなもの:

class Error(Exception):
    def __init__(self):
        if some stuff:
            pass
        elif some other stuff:
            # re-raise myself

raise Error()

使用しようとしましraise selfたが、エラーが返されます。また、これにリンクされていると思われる例外クラスへの属性は見当たりません。

編集

これを行いたいのはException、例外に渡されるパラメーターに応じて出力されるエラーメッセージをフォーマットする特別なメソッドをクラスにアタッチしたためです。別のオブジェクトで書式設定作業を行うこともできましたが、それは例外によってのみ使用されるため、それを例外クラス自体にアタッチするのが自然に思えました。

4

3 に答える 3

1

編集:この回答は受け入れられませんでした。poke の回答は、問題の核心に対処し、正しい解決策を示しています。

自己啓発クラスは私にとってはうまくいくようです:

>>> class Err(Exception):
...   def __init__(self):
...     Exception.__init__(self, 'gulp!')
...     raise self
... 
>>> raise Err()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in __init__
__main__.Err: gulp!

私は Python 言語のエクスポートではありません。そのため、これは、うまく動作しない奇妙な半分中断されたクラスである可能性があります。買い手責任負担。

切実な質問: なぜこれを行うのですか? 例外を構築した後に明示的に例外を発生させるという標準の Python イディオムを使用したくない理由はありますか?

于 2013-04-24T22:27:41.163 に答える