
Многие начинающие программисты, только освоив синтаксис 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 — малоизвестные, но мощные фичи языка
📢 Подписывайтесь на Telegram-канал PythonAuto, чтобы не пропустить новые гайды по автоматизации, парсингу и Python.
👉 Ваш интерес — лучшая мотивация для новых статей!