При попытке использовать перечисление в Python 3.7.3 возникает следующая ошибка. Уже пытался установить и удалить enum34, но все равно не работает. Проделал все операции в виртуальной среде (как показывает ошибка).
Что еще я могу сделать, чтобы исправить это (кроме использования другой реализации перечисления, как показано в этот вопрос)?
#enum import:
from enum import Enum
# enum definition:
class Status(Enum):
on: 1
off: 2
# enum utilisation (another class, same file):
self.status = Status.off
# error:
File "C:\dev\python\test\venv\lib\enum.py", line 349, in __getattr__
AttributeError(name) from None
AttributeError: off
Правильный синтаксис для определения перечисления:
class Status(Enum):
on = 1
off = 2
Не on: 1
.
В вашем определении используйте =
для присвоения значений атрибутам, а не :
.
# enum definition:
class Status(Enum):
on = 1
off = 2
Вот и все, но ты опоздал, извини :/
Не могли бы вы добавить объяснение, почему исходный синтаксис OP не был ошибкой?
@ИтанФурман что? почему вы говорите, что это "не было ошибкой"? На самом деле это была синтаксическая ошибка; вы используете =
для присвоения значений, а не :
.
Не в 3.7 — он создает аннотации, поэтому Status
был пуст.
@EthanFurman Я новичок в Python. Искал аннотации после вашего комментария. Вы про аннотации типа "вкл: int=1, выкл: int=2"? Если да, то почему «on: 1» не генерирует ошибку, поскольку 1 не является типом, таким как int или str?
Хех - это для вас, чтобы исследовать и обучать нас! Если хочешь, конечно. В зависимости от глубины вашего ответа, я буду рад опубликовать вознаграждение в размере от 100 до 500 репутации.
@EthanFurman Я просто пытался обучиться и понять ваш комментарий, извините, что побеспокоил вас.
@EthanFurman, это не то, как предполагается использовать annotations
, вы должны использовать типы данных, а не значения ¯\_(ツ)_/¯
@supafly: Ой! Я думал, что разговариваю с @c0x6a. Мои извенения! Короткий ответ на ваш вопрос заключается в том, что аннотации предназначены для поддержки средств проверки статического типа, таких как MyPy, поэтому сам Python ничего не делает с предоставленной информацией, кроме как сохраняет ее в атрибуте __annotations__
.
@EthanFurman не беспокойтесь :) спасибо! (тем временем за меня проголосовали, не знаю почему, но и тут не о чем беспокоиться... работал допоздна после нескольких часов работы с json, не увидел моей глупой ошибки и в итоге узнал об аннотациях :)
Это правильный вопрос, вызванный недавно добавленным синтаксисом, поддерживающим аннотации типов. Пожалуйста, откройте его снова.