2016-05-24 6 views
0

属性を決して削除しないクラス、つまりdel myClass.immortal_attrを実装しています。ユーザーがこれを実行しようとしたときに発生させることができる例外は何ですか?Python Deleterを実装する際に発生する例外

組み込みの例外は私には明らかではありませんでしたが、カスタムExceptionクラスを実装する必要があるようには感じられません。 DeleteErrorのようなものは、かなり普遍的なニーズのように思えます。

+0

なぜ、AttributeErrorはありませんか? –

+0

または単に 'RuntimeError'。 –

+0

それ以外のものが適切でない場合、RuntimeErrorは私の選択です。これは私が確信していないものです。 – salotz

答えて

2

はレイズだけのPythonに付属しているタイプのようなAttributeErrorは、実行します。

>>> del (1).bit_length 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'int' object attribute 'bit_length' is read-only 
>>> class Foo(object): 
...  @property 
...  def x(self): 
...   return 3 
... 
>>> del Foo().x 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: can't delete attribute 

ところで、propertyであなたの属性を実装するあなたが何をしようとして達成するための良い方法かもしれません。

+0

私はこれが道だと思ったが、私のテストケースにはバグがあった...と思っていたのですが... – salotz

0

私はAttributeErrorがあなたがしようとしているものでうまくいくと思っていますが、自分のやりたいことに合わない場合は独自のカスタム例外を作成することもできます。

このサイトでは、カスタム例外を作成する方法を理解するのに役立つかもしれません。 https://www.codementor.io/python/tutorial/how-to-write-python-custom-exceptions

+0

[delリファレンス](https://docs.python.org/3/library/exceptions.html#AttributeError)を削除していますか? – salotz

+0

Hmm。私は正直に肯定的ではない。あなたは '(オブジェクト).__ del __(自己)'を使っていますか?そのためのドキュメントを見ると、例外は完全に無視されているように見えます。 [Documentation](https://docs.python.org/2/reference/datamodel.html#object.__del__) – Colby

+0

@Colby: 'del'と' __del__'は無関係です。 – user2357112

関連する問題