10 ошибок новичков в Python — и как их избежать

🐞 Кратко: Эти 10 ошибок совершают почти все начинающие. Узнайте, как их избежать — и писать стабильный, предсказуемый код с первого дня.
10 ошибок новичков в Python

Многие начинающие программисты, только освоив синтаксис Python, сталкиваются с тем, что их код либо падает с непонятными ошибками, либо работает — но выдаёт странный результат. Причина не в логике задачи, а в типичных ошибках, которые допускают почти все новички: от изменяемых аргументов по умолчанию до проблем с кодировками и путями.

В этой статье мы разберём 10 самых частых ошибок новичков в Python — с живыми примерами, пояснением, почему так происходит, и, главное, как этого избежать. После прочтения вы сможете писать не просто рабочий, а стабильный и предсказуемый код с самого начала.

1. Изменяемые аргументы по умолчанию (mutable default arguments)

Ошибка

def add_item(item, target_list=[]):
    target_list.append(item)
    return target_list

print(add_item("яблоко"))   # ['яблоко']
print(add_item("банан"))    # ['яблоко', 'банан'] ← ОЙ!

Список [] создаётся один раз при определении функции, а не при каждом вызове.

Правильно

def add_item(item, target_list=None):
    if target_list is None:
        target_list = []
    target_list.append(item)
    return target_list

💡 Это — классика Python. Запомните: никогда не используйте [], {} или другие изменяемые объекты в аргументах по умолчанию.

Такие «ловушки» в Python становятся очевидны только с опытом. Чтобы заранее узнать о подобных тонкостях, посмотрите статью редкие трюки python — там собраны малоизвестные, но мощные возможности языка, которые помогут писать надёжный код.

2. Сравнение строк без учёта регистра

Ошибка

user_input = "Admin"
if user_input == "admin":
    print("Добро пожаловать!")  # не сработает

Правильно

if user_input.lower() == "admin":
    print("Добро пожаловать!")

Или для локализованных программ — casefold():

"Maße".casefold() == "masse".casefold()  # True

3. Проблемы с путями: слэши и кроссплатформенность

Ошибка

path = "folder\\subfolder\\file.txt"  # работает только на Windows

Правильно

from pathlib import Path

path = Path("folder") / "subfolder" / "file.txt"
# или
import os
path = os.path.join("folder", "subfolder", "file.txt")

pathlib — современный и надёжный способ.

4. Забытый return в функции

Ошибка

def calculate_total(items):
    total = sum(items)
    # забыли return!

result = calculate_total([1, 2, 3])
print(result)  # None!

Совет

Всегда проверяйте, что функция возвращает ожидаемое значение. Используйте аннотации типов:

def calculate_total(items: list) -> float:
    return sum(items)

Если вы только начинаете писать функции, обязательно изучите подходы из статьи чистый код python — там подробно объясняется, как структурировать код, использовать аннотации типов и избегать «скрытых» ошибок вроде пропущенного return.

5. Кодировка при чтении файлов

Ошибка

with open("data.txt") as f:
    content = f.read()  # на Windows — кракозябры

Правильно

with open("data.txt", encoding="utf-8") as f:
    content = f.read()

💡 Всегда указывайте encoding="utf-8" — это стандарт.

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

Ошибка

nums = [1, 2, 3, 4]
for n in nums:
    if n % 2 == 0:
        nums.remove(n)  # приведёт к пропуску элементов!

Правильно

# Создаём копию для итерации
for n in nums[:]:
    if n % 2 == 0:
        nums.remove(n)

# Или собирайте новый список
nums = [n for n in nums if n % 2 != 0]

7. Неправильное сравнение None

Ошибка

if value == None:  # работает, но так не делают
    ...

Правильно

if value is None:
    ...

📚 None — синглтон. Сравнивайте через is, а не ==.

8. Игнорирование исключений

Ошибка

try:
    risky_function()
except:
    pass  # «Заглушка» скроет ВСЁ, даже KeyboardInterrupt

Правильно

try:
    risky_function()
except ValueError as e:
    print(f"Ошибка: {e}")

⚠️ Всегда ловите конкретные исключения.

9. Перепутанные переменные в цикле

Ошибка

callbacks = []
for i in range(3):
    callbacks.append(lambda: print(i))
for cb in callbacks:
    cb()  # выведет 2, 2, 2

Правильно

for i in range(3):
    callbacks.append(lambda x=i: print(x))

Или используйте functools.partial.

10. Неиспользование виртуального окружения

Запуск pip install глобально приводит к конфликтам версий.

Всегда используйте:

python -m venv venv
source venv/bin/activate  # Linux/macOS
# или venv\Scripts\activate  # Windows
pip install -r requirements.txt

💡 Это спасает от «а у меня работало!» на другом компьютере.

Заключение

Эти ошибки — не признак слабого программиста. Их совершают все, кто начинает.

Но теперь и вы знаете:

  • Почему возникает каждая проблема
  • Как её избежать
  • Как писать более надёжный и читаемый код

🐍 Помните: хороший код — это не тот, что работает, а тот, что не ломается тайно.

🧠 Если вам полезны советы по Python, посмотрите также:
чистый код python — как писать понятные и поддерживаемые скрипты
редкие трюки python — малоизвестные, но мощные фичи языка
💬 Остались вопросы? Пишите в комментариях — с радостью уточню, дополню или помогу с вашим кодом.
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!

Оставьте комментарий