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 <rep...@bugs.python.org> <http://bugs.python.org/issue19025> _______________________________________ _______________________________________________ Python-bugs-list mailing list Unsubscribe: https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com