-
-
Couldn't load subscription status.
- Fork 33.3k
Closed
Labels
3.11only security fixesonly security fixes3.12only security fixesonly security fixesstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error
Description
Bug report
In acf7403 (#30582), @ethanfurman implemented a global_enum decorator, replacing the __str__ of an enum with enum.global_str:
Lines 1638 to 1645 in 760ec89
| def global_str(self): | |
| """ | |
| use enum_name instead of class.enum_name | |
| """ | |
| if self._name_ is None: | |
| return "%s(%r)" % (cls_name, self._value_) | |
| else: | |
| return self._name_ |
(This was later reverted in 42a64c0 and reintroduced in 83d544b, but I believe the code to be the same).
If the ._name_ attribute is None, this uses cls_name, but that's not defined anywhere in that function!
Here is a (somewhat contrived) example:
import enum
@enum.global_enum
class EnumTest(enum.Enum):
VAL = 1
EnumTest.VAL._name_ = None
print(str(VAL))this fails with:
Traceback (most recent call last):
File "/home/florian/tmp/x.py", line 9, in <module>
print(str(VAL))
^^^^^^^^
File "/usr/lib/python3.11/enum.py", line 1646, in global_str
return "%s(%r)" % (cls_name, self._value_)
^^^^^^^^
NameError: name 'cls_name' is not defined(Found by running flake8 over Lib/ out of curiosity, see #93010 (comment))
Your environment
- CPython versions tested on: Python 3.11.0b1
- Operating system and architecture: Archlinux x86_64
mguinhos
Metadata
Metadata
Assignees
Labels
3.11only security fixesonly security fixes3.12only security fixesonly security fixesstdlibStandard Library Python modules in the Lib/ directoryStandard Library Python modules in the Lib/ directorytype-bugAn unexpected behavior, bug, or errorAn unexpected behavior, bug, or error