Algolit/ БлогНа главную →
← Все статьи
Python7 мин · 22 мая 2026 г.

Топ-10 ошибок новичков в Python (и как их исправить)

Все мы через это проходили. Вот 10 ошибок, которые делает почти каждый начинающий Python-разработчик — и как их избежать.

1. Изменяемый аргумент по умолчанию

Одна из самых коварных ловушек Python:

# ❌ Неправильно
def add_item(item, items=[]):
    items.append(item)
    return items

print(add_item("a"))  # ["a"]
print(add_item("b"))  # ["a", "b"] — сюрприз!

# ✅ Правильно
def add_item(item, items=None):
    if items is None:
        items = []
    items.append(item)
    return items

Список создаётся один раз при определении функции, а не при каждом вызове. Используйте None как значение по умолчанию.

2. Сравнение с None через ==

# ❌ Работает, но неправильно
if value == None:
    pass

# ✅ Правильно — None единственный, используйте is
if value is None:
    pass

3. Изменение списка во время итерации

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

# ❌ Пропустит элементы
for num in numbers:
    if num % 2 == 0:
        numbers.remove(num)

# ✅ Итерируйте по копии
for num in numbers[:]:
    if num % 2 == 0:
        numbers.remove(num)

# ✅ Или используйте list comprehension
numbers = [num for num in numbers if num % 2 != 0]

4. Неправильное использование except

# ❌ Ловит ВСЕ исключения, включая KeyboardInterrupt
try:
    do_something()
except:
    pass

# ✅ Ловите конкретные исключения
try:
    do_something()
except ValueError as e:
    print(f"Ошибка значения: {e}")
except FileNotFoundError:
    print("Файл не найден")

5. Конкатенация строк в цикле

# ❌ Медленно — создаёт новую строку на каждой итерации
result = ""
for word in words:
    result += word + " "

# ✅ Используйте join — намного быстрее
result = " ".join(words)

6. Не использовать enumerate()

fruits = ["яблоко", "груша", "банан"]

# ❌ По-старинке
i = 0
for fruit in fruits:
    print(f"{i}: {fruit}")
    i += 1

# ✅ Pythonic way
for i, fruit in enumerate(fruits):
    print(f"{i}: {fruit}")

7. Проверка типа через type() вместо isinstance()

# ❌ Не учитывает наследование
if type(x) == int:
    pass

# ✅ Правильно
if isinstance(x, int):
    pass

# isinstance также проверяет несколько типов сразу
if isinstance(x, (int, float)):
    pass

8. Игнорирование list comprehension

# ❌ Многословно
squares = []
for x in range(10):
    if x % 2 == 0:
        squares.append(x ** 2)

# ✅ Лаконично и быстрее
squares = [x**2 for x in range(10) if x % 2 == 0]

9. Неправильное копирование списков

original = [1, 2, 3]

# ❌ Это не копия — оба имени указывают на один список
copy = original
copy.append(4)
print(original)  # [1, 2, 3, 4] — изменился!

# ✅ Мелкая копия
copy = original[:]
copy = original.copy()
copy = list(original)

# ✅ Глубокая копия для вложенных структур
import copy
deep_copy = copy.deepcopy(original)

10. Не читать сообщения об ошибках

Это не ошибка кода, но самая частая «ошибка» новичков — игнорировать traceback. Python даёт точную информацию о том, что пошло не так и где. Читайте снизу вверх: последняя строка — ошибка, выше — где она произошла.

Хочешь отработать эти паттерны на практике? На Algolit — задачи по Python с мгновенной проверкой и разбором типичных ошибок.

Хочешь закрепить знания на практике?

Решай задачи на Algolit — интерактивная платформа для обучения

Начать бесплатно →

Читать также

Python с чего начать: полный гайд для новичков в 20269 мин →
Топ-10 ошибок новичков в Python (и как их исправить) | Algolit