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

⚡ Топ ошибок

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

❌ Ошибка 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: модификация списка при итерации

numbers = [1, 2, 3, 4, 5]
for number in numbers:
    if number % 2 == 0:
        numbers.remove(number)
print(numbers)  # [1, 3, 5] — иногда работает, но это случайность

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

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

numbers = [1, 2, 3, 4, 5]
result = [n for n in numbers if n % 2 != 0]
print(result)  # [1, 3, 5]

❌ Ошибка 6: ошибки со срезами

numbers = [1, 2, 3, 4, 5]
print(numbers[1:3])  # [2, 3] — а не [2, 3, 4]

Почему возникает: правая граница среза не включается.

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

numbers = [1, 2, 3, 4, 5]
print(numbers[1:4])  # [2, 3, 4]

❌ Ошибка 7: выход за границы списка

numbers = [1, 2, 3]
for i in range(len(numbers)):
    print(numbers[i + 1])  # IndexError на последнем шаге

Почему возникает: индекс i + 1 выходит за пределы списка.

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

numbers = [1, 2, 3]
for i in range(len(numbers) - 1):
    print(numbers[i + 1])

❌ Ошибка 8: пустая строка и предикаты

text = ""
if text.isdigit():
    print("Это число")
else:
    print("Это не число")  # пустая строка даёт False

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

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

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