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

⚡ Топ ошибок

  • Пытаться изменить строку по индексу: строки неизменяемы.
  • Забыть присвоить результат метода новой переменной.
  • Путать find() и index(): первый возвращает -1, второй вызывает ValueError.
  • Использовать split(" ") вместо split() — появляются пустые строки.
  • Забыть экранировать фигурные скобки в f-string.

❌ Ошибка 1: попытка изменить строку по индексу

text = "hello"
text[0] = "H"
# TypeError: 'str' object does not support item assignment

Почему возникает: строки в Python неизменяемы. Нельзя заменить отдельный символ напрямую.

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

text = "hello"
new_text = "H" + text[1:]
print(new_text)  # Hello

# Или через replace
print(text.replace("h", "H", 1))  # Hello

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

text = "  hello  "
text.strip()
print(f"[{text}]")  # [  hello  ] — пробелы остались

Почему возникает: метод strip() возвращает новую строку, но результат никуда не присвоен.

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

text = "  hello  "
text = text.strip()
print(f"[{text}]")  # [hello]

❌ Ошибка 3: путаем find() и index()

text = "hello world"
pos = text.index("Python")
# ValueError: substring not found

Почему возникает: index() вызывает исключение, если подстрока не найдена.

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

text = "hello world"
pos = text.find("Python")
if pos == -1:
    print("Не найдено")
else:
    print(f"Найдено на позиции {pos}")

❌ Ошибка 4: split() против split(" ")

text = "a  b\tc"
print(text.split(" "))
# ['a', '', '', 'b\t', 'c']

Почему возникает: split(" ") разбивает только по одному пробелу, не обрабатывая табуляцию, перенос строки и несколько пробелов подряд.

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

text = "a  b\tc"
print(text.split())
# ['a', 'b', 'c']

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

name = "Python"
print(f"{{name}}")
# {name}

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

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

name = "Python"
print(f"{name}")   # Python
print(f"{{name}}") # {name} — если нужны литеральные скобки

❌ Ошибка 6: проверка пустой строки через isdigit()

text = ""
if text.isdigit():
    print("Это число")
else:
    print("Это не число")

Почему возникает: для пустой строки все предикаты возвращают False. Это логично, но иногда забывают проверить, что строка не пуста.

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

text = input("Введите число: ")
if text and text.isdigit():
    print("Это число")
else:
    print("Это не число")

❌ Ошибка 7: путаница между title() и capitalize()

text = "hello world"
print(text.capitalize())  # Hello world
print(text.title())       # Hello World

Почему возникает: capitalize() делает заглавной только первую букву строки, а title() — первую букву каждого слова.

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

text = "hello world"
print(text.title())  # Hello World