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

⚡ Топ ошибок

  • Путать порядок или типы аргументов в C-style форматировании.
  • Забывать префикс f у f-strings.
  • Использовать {} как обычный текст в f-string без экранирования.
  • Не учитывать, что format() и методы выравнивания возвращают новую строку.
  • Путать округление с отсечением знаков: .2f округляет.

❌ Ошибка 1: несоответствие типов в C-style

name = "Alice"
age = 30
print("My name is %d and I am %s years old." % (name, age))
# TypeError: %d format: a real number is required, not str

Почему возникает: спецификатор %d ожидает число, а %s — строку. Порядок аргументов должен совпадать с порядком спецификаторов.

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

print("My name is %s and I am %d years old." % (name, age))

Лучше сразу используйте f-string:

print(f"My name is {name} and I am {age} years old.")

❌ Ошибка 2: забытый префикс f

name = "Alice"
print("My name is {name}")
# My name is {name} — подстановки не произошло

Почему возникает: без префикса f фигурные скобки воспринимаются как обычный текст.

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

print(f"My name is {name}")

❌ Ошибка 3: фигурные скобки в f-string

print(f"{ {'a': 1} }")
# SyntaxError: f-string expression part cannot include '{'

Почему возникает: внутри выражения f-string нельзя использовать литеральные фигурные скобки.

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

d = {'a': 1}
print(f"{d}")

❌ Ошибка 4: путаем округление и отсечение

number = 1234.5678
print(f"{number:.2f}")  # 1234.57, а не 1234.56

Почему возникает: спецификатор .2f округляет по правилам арифметики, а не отбрасывает лишние знаки.

✅ Если нужно отсечь

number = 1234.5678
truncated = int(number * 100) / 100
print(f"{truncated:.2f}")  # 1234.56

❌ Ошибка 5: не сохранён результат метода выравнивания

text = "hi"
text.rjust(10, '-')
print(f"[{text}]")  # [hi] — выравнивание потеряно

Почему возникает: метод rjust() возвращает новую строку, исходная не изменяется.

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

text = "hi"
text = text.rjust(10, '-')
print(f"[{text}]")  # [--------hi]

❌ Ошибка 6: неверный синтаксис комбинирования аргументов format()

print("The {0} is {color}.".format(color="blue", "sky"))
# SyntaxError: positional argument follows keyword argument

Почему возникает: позиционные аргументы должны идти до именованных.

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

print("The {0} is {color}.".format("sky", color="blue"))