Python 3.7+Исключенияисключение
dataclasses.FrozenInstanceError
модульные исключения
Попытка изменить поле frozen-dataclass (@dataclass(frozen=True)).
Синтаксис
raise dataclasses.FrozenInstanceError
Это подкласс AttributeError, поэтому широкий except AttributeError проглотит его незаметно — ловите именно FrozenInstanceError, если хотите отличить попытку записи в frozen-объект от опечатки в имени атрибута. И помните, что frozen=True запрещает только присваивание и удаление атрибутов самого объекта: список или словарь, лежащий в поле, по-прежнему меняется на месте, так что неизменяемость тут поверхностная. Чтобы получить объект с другим значением поля, делают изменённую копию через dataclasses.replace().
Примеры
import dataclasses
try:
raise dataclasses.FrozenInstanceError
except dataclasses.FrozenInstanceError as e:
print(type(e).__name__) # → FrozenInstanceError
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности