Learnly
Python с нуля/Глава 5/Урок 3

Типичные ошибки в условиях и циклах

Типичные ошибки в условиях и циклах

Это урок про ошибки, и это один из самых важных уроков. Зная типичные ловушки заранее, ты избежишь часов отладки.

Ошибка 1: = вместо ==

# НЕПРАВИЛЬНО, присваивание вместо сравнения
if x = 5:     # SyntaxError
    print("да")

# ПРАВИЛЬНО, сравнение
if x == 5:
    print("да")

Одно =, присвоить. Два ==, сравнить. Это путают постоянно.

Ошибка 2: Неверные отступы

# НЕПРАВИЛЬНО, print не имеет отступа
if age > 18:
print("Доступ разрешён")   # IndentationError

# ПРАВИЛЬНО
if age > 18:
    print("Доступ разрешён")

Python использует отступы вместо скобок. 4 пробела, стандарт. Смешивать пробелы и табуляцию нельзя.

Ошибка 3: Бесконечный цикл

# ОПАСНО, условие никогда не станет False
x = 0
while x < 10:
    print(x)
    # забыли x += 1, цикл крутится вечно!

# ПРАВИЛЬНО
x = 0
while x < 10:
    print(x)
    x += 1    # обязательно обновляем переменную

Если программа зависла, скорее всего бесконечный цикл. Останови через Ctrl+C.

Ошибка 4: Сравнение с None

result = None

# НЕПРАВИЛЬНО
if result == None:    # работает, но не питонично
    print("пусто")

# ПРАВИЛЬНО
if result is None:
    print("пусто")

if result is not None:
    print("есть значение")

None в Python, специальное значение "ничего". Для сравнения с ним используют is, а не ==.

Ошибка 5: Логика AND/OR

city = "Москва"

# НЕПРАВИЛЬНО, Python не понимает "так"
if city == "Москва" or "СПб":    # всегда True!
    print("Большой город")

# ПРАВИЛЬНО
if city == "Москва" or city == "СПб":
    print("Большой город")

# Или лучше через in
if city in ("Москва", "СПб"):
    print("Большой город")

Ошибка 6: Изменение списка внутри цикла

numbers = [1, 2, 3, 4, 5]

# ОПАСНО, изменяем список пока идём по нему
for n in numbers:
    if n % 2 == 0:
        numbers.remove(n)   # непредсказуемое поведение!

# ПРАВИЛЬНО, создаём новый список
numbers = [n for n in numbers if n % 2 != 0]

Что делать когда что-то не работает

  1. Прочитай текст ошибки, Python обычно точно говорит что не так
  2. Посмотри на строку где ошибка (Python указывает номер)
  3. Проверь отступы
  4. Добавь print() чтобы посмотреть значения переменных в разных местах
  5. Скопируй текст ошибки в поиск, решение почти всегда уже есть

💡 Главная мысль: Ошибки, нормальная часть программирования. Даже опытные разработчики делают их каждый день. Важно уметь их читать и понимать.