🐛 Типичные ошибки

⚡ Топ-3 ошибки

  1. Путать json.dumps и json.dump.
  2. Забывать ensure_ascii=False при работе с русским текстом.
  3. Использовать неверный формат в strptime.

❌ Ошибка 1: json.dumps вместо json.dump

# Неправильно
import json

data = {"name": "Alice"}
with open("data.json", "w", encoding="utf-8") as f:
    json.dumps(data, f)

Сообщение об ошибке: TypeError: ...

Почему возникает: dumps принимает только объект и возвращает строку, а не файловый объект.

✅ Исправление

with open("data.json", "w", encoding="utf-8") as f:
    json.dump(data, f, ensure_ascii=False, indent=2)

❌ Ошибка 2: Русский текст в JSON

# Неправильно
import json

data = {"city": "Минск"}
print(json.dumps(data))  # {"city": "\u041c\u0438\u043d\u0441\u043a"}

Почему возникает: По умолчанию ensure_ascii=True экранирует не-ASCII символы.

✅ Исправление

print(json.dumps(data, ensure_ascii=False))

❌ Ошибка 3: Неверный формат strptime

# Неправильно
from datetime import datetime

dt = datetime.strptime("15-06-2025", "%d/%m/%Y")

Сообщение об ошибке: ValueError: time data ... does not match format ...

Почему возникает: Формат должен точно соответствовать строке, включая разделители.

✅ Исправление

dt = datetime.strptime("15-06-2025", "%d-%m-%Y")

❌ Ошибка 4: Попытка повторно использовать генератор

# Неправильно
def count_up_to(n):
    for i in range(1, n + 1):
        yield i

gen = count_up_to(3)
print(list(gen))  # [1, 2, 3]
print(list(gen))  # []

Почему возникает: Генератор исчерпывается после первого прохода. Для повторного использования нужно создать новый объект.

✅ Исправление

print(list(count_up_to(3)))
print(list(count_up_to(3)))

❌ Ошибка 5: Одинарные кавычки в JSON

# Неправильно
import json

data = json.loads("{'x': 1}")

Сообщение об ошибке: json.JSONDecodeError

Почему возникает: JSON требует двойные кавычки для строк и ключей.

✅ Исправление

data = json.loads('{"x": 1}')