New submission from Vajrasky Kok:
>>> from enum import Enum
>>> class MyPet(Enum):
... CUTE_CAT = 1
... VIGOROUS_DOG = 2
... UGLY_BLOBFISH = 3
... PROMISCUOUS_BONOBO = 4
... def spam(cls): pass
...
>>> del MyPet.CUTE_CAT
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: CUTE_CAT
This is misleading. I have CUTE_CAT attribute in Enum. It should throw
TypeError exception.
>>> del MyPet.LONELY_WOLF
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: LONELY_WOLF
This is correct.
>>> del MyPet['CUTE_CAT']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'EnumMeta' object does not support item deletion
I think this behaviour is correct.
>>> del MyPet['LONELY_WOLF']
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'EnumMeta' object does not support item deletion
This behaviour is somewhat misleading. I don't have LONELY_WOLF item.
>>> del MyPet.spam
>>> hasattr(MyPet, 'spam')
False
This is correct. We should be able to delete method from Enum class, or
shouldn't we?
>>> cute_cat = MyPet.CUTE_CAT
>>> del cute_cat.name
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/sky/Code/python/programming_language/cpython/Lib/enum.py", line
29, in __delete__
raise AttributeError("can't delete attribute")
AttributeError: can't delete attribute
This is *maybe" correct. But shouldn't it be TypeError exception?
All the exception messages related with deleting attribute in Python codebase
are using TypeError exception (with one exception in pyexpat on which it uses
RuntimeError exception).
Attached the patch to handle the attribute deletion correctly.
For now, I don't change the exception for the last case (del
MyPet.CUTE_CAT.name) because maybe there is an exception case for enum.
----------
components: Library (Lib)
files: handling_attribute_deletion_correctly_in_enum.patch
keywords: patch
messages: 197775
nosy: ethan.furman, vajrasky
priority: normal
severity: normal
status: open
title: Deleting attribute of Enum gives misleading error message
type: behavior
versions: Python 3.4
Added file:
http://bugs.python.org/file31771/handling_attribute_deletion_correctly_in_enum.patch
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue19025>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com