← Все вопросы

dict.get() - это удобно или опасно?

Задан 2 месяца назад5 просмотров1 ответ
0

Всегда использовал dict.get(key, default) для безопасного доступа к словарю:

python data = {'name': 'Alice'} age = data.get('age', 0) # 0 Но недавно прочитал, что некоторые разработчики считают это плохой практикой. Аргументы:

Если ключ действительно существует, но его значение — None, то вы не отличите отсутствие ключа от ключа со значением None.

Это маскирует ошибки — проще случайно получить None и не заметить.

Вопрос: как вы поступаете в реальных проектах? Используете get() или предпочитаете try/except? И когда get() действительно оправдан?

1 ответ

0

dict.get — норм инструмент, «опасным» его зовут в паре конкретных ситуаций, а не вообще.

где реально удобен: ключа может не быть, это ожидаемо, и дефолт осмысленный. data.get('age', 0) — ок.

где стреляет:

  1. когда None — валидное значение. d.get('x') вернёт None и если ключа нет, и если он есть со значением None — эти два случая ты не различишь. тогда лучше 'x' in d или d.get('x', sentinel) с уникальным маркером.
  2. когда ключ по логике ОБЯЗАН быть. если его нет — это баг, и пусть лучше громко упадёт с KeyError (через d['x']), чем тихо подставит дефолт и понесёт кривые данные дальше. get тут просто маскирует ошибку.

так что вопрос не «удобно или опасно», а «смотри по смыслу»: ключ опциональный → get с дефолтом, ключ обязательный → квадратные скобки и пусть падает, важно отличать «нет ключа» от «значение None» → in или sentinel

Ваш ответ

, чтобы ответить на вопрос.