2016-05-24 15 views
0

Ich implementiere eine Klasse, in der ich möchte, dass ein Attribut nie gelöscht wird, d. H. del myClass.immortal_attr. Welche Exception kann ausgelöst werden, wenn der Benutzer dies versucht?Ausnahme bei der Implementierung eines Python-Deleaters

Keine der eingebauten Ausnahmen schien mir offensichtlich, es fühlt sich nicht so an, als müsste ich eine benutzerdefinierte Exception-Klasse implementieren. Etwas wie DeleteError scheint wie ein ziemlich universelles Bedürfnis.

+0

Warum nicht ein 'AttributError'? –

+0

Oder einfach 'RuntimeError'. –

+0

'RuntimeError' wäre meine Wahl, wenn nichts anderes angebracht wäre, worüber ich mir nicht sicher war. – salotz

Antwort

2

Raise ein AttributeError, genau wie die Typen, die mit Python kommen tun:

>>> 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 

übrigens mit einem property Ihr Attribute Implementierung könnte ein guter Weg, um zu erreichen, was Sie versuchen zu tun.

+0

Ich dachte, dies könnte der Weg gewesen sein, aber mein Testfall hatte einen Fehler ... – salotz

0

Ich glaube, AttributeError könnte für das, was Sie versuchen, zu arbeiten, aber Sie könnten auch Ihre eigene benutzerdefinierte Ausnahme erstellen, wenn das nicht ganz passend ist, was Sie tun möchten.

Diese Website kann Ihnen möglicherweise dabei helfen, herauszufinden, wie Sie eine benutzerdefinierte Ausnahme erstellen können. https://www.codementor.io/python/tutorial/how-to-write-python-custom-exceptions

+0

Ist das Löschen mit 'del' und [Attributverweis] (https://docs.python.org/3/library/exceptions.html#AttributeError)? – salotz

+0

Hmm. Ich bin ehrlich gesagt nicht positiv. Verwenden Sie '(Objekt) .__ del __ (self)'? Wenn man sich die Dokumentation ansieht, sieht es so aus, als ob Ausnahmen dafür völlig ignoriert würden. [Dokumentation] (https://docs.python.org/2/reference/datamodel.html#object.__del__) – Colby

+0

@Colby: 'del' und' __del__' sind nicht verwandt. – user2357112

Verwandte Themen