9 ошибок, которые выдают в Python-разработчике новичка

Логотип компании МТС

Все через это проходили, но теперь вам будет проще. Добавляйте в закладки — точно пригодится.

Обложка поста 9 ошибок, которые выдают в Python-разработчике новичка

Опытный Python-разработчик может с лёгкостью определить код новичка. Магия? Нет, просто начинающие программисты обычно совершают одни и те же ошибки.

Все проходили через это — и проводили часы на StackOverflow из-за неправильных отступов, двоеточий и других банальных опечаток.

Чтобы сэкономить ваше время, в этой статье мы собрали распространённые ошибки новичков. Начнём с самого простого и постепенно перейдём к более сложным темам.

1. Неправильные отступы

В Python отступы используют не только для улучшения читаемости кода, но и чтобы обозначить, что к чему относится. Например, ниже можно увидеть два цикла. В первом случае print c текстом сработает после завершения цикла, а во втором, благодаря отступу, — на каждой итерации.

Здесь текст End of the cycle мы увидим при завершении работы цикла:

9 ошибок, которые выдают в Python-разработчике новичка 1
9 ошибок, которые выдают в Python-разработчике новичка 2

А тут — на каждой итерации цикла:

9 ошибок, которые выдают в Python-разработчике новичка 3
9 ошибок, которые выдают в Python-разработчике новичка 4

Поэтому если код работает не так, как вы планировали,
проверьте отступы.

2. Зарезервированные слова для имён переменных

В Python есть список ключевых (или зарезервированных) слов, которые нельзя использовать в качестве имён переменных.

9 ошибок, которые выдают в Python-разработчике новичка 5

Если нарушить это правило, вы получите сообщение об ошибке SyntaxError: invalid syntax. Например, вот так делать нельзя:

9 ошибок, которые выдают в Python-разработчике новичка 6

3. Лишняя точка с запятой

В отличие от JavaScript, где точка с запятой используется для
отделения инструкций друг от друга, в Python она просто не нужна.

Это настолько частая ошибка, что многие интерпретаторы игнорируют «;» и выполняют код так, как будто её нет. Например, ниже можно
увидеть, что VS Code просто подсветил точки с запятой красным цветом.

9 ошибок, которые выдают в Python-разработчике новичка 7

Однако системы со строгими требованиями такой код не устроит.
Компьютер остановит выполнение программы с ошибкой — чтобы продолжить работу, точку с запятой надо будет убрать.

4. Операторы «++» и «—»

Если вы начали учить Python после других языков программирования, можете удивиться, что в нём нет привычных операторов инкремента «++» и декремента «—». При их использовании вы увидите ошибку SyntaxError: invalid syntax.

Вместо этого для приращения значения переменной можно использовать оператор «+=» или просто переназначить её через «x=x+1».

9 ошибок, которые выдают в Python-разработчике новичка 8

Аналогично всё работает и при уменьшении значения переменной:

9 ошибок, которые выдают в Python-разработчике новичка 9

5. Отсутствие двоеточия

Во многих языках программирования после объявления циклов и
функций идут фигурные скобки, а в них необходимый код. В Python такие скобки не используются, зато есть двоеточие, о котором многие забывают. Это настолько распространённая ошибка, что большинство редакторов кода подсвечивают места, где двоеточие пропущено.

9 ошибок, которые выдают в Python-разработчике новичка 10

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

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

9 ошибок, которые выдают в Python-разработчике новичка 11

Проблема в том, что благодаря оператору присваивания теперь
при изменении dict_b словарь dict_a тоже будет изменён.

9 ошибок, которые выдают в Python-разработчике новичка 12

Чтобы такого не происходило, нужно использовать методы copy()
или deepcopy().

9 ошибок, которые выдают в Python-разработчике новичка 13

Теперь мы видим, что изменения вносятся только во вторую
библиотеку.

9 ошибок, которые выдают в Python-разработчике новичка 14

7. Оператор «+» для конкатенации

«+» — простой и понятный для новичков оператор, но он не
всегда является самым эффективным решением для конкатенации. Чем больше строк вам нужно соединить в одну, тем больше плюсов придётся добавить, а это засоряет код. Поэтому для конкатенации лучше использовать f-строки.

Сравним два варианта на примере:

9 ошибок, которые выдают в Python-разработчике новичка 15

Во втором случае мы видим более «чистый» код, с которым проще
работать. А результат выполнения программы будет одинаковым.

8. Злоупотребление импортом

Начинающие разработчики часто импортируют все имена из
модулей. Например, вот так:

9 ошибок, которые выдают в Python-разработчике новичка 16

Так делать не стоит, потому что модуль может содержать большое количество объектов, и импорт всего списка замедлит работу программы. Кроме того, иногда это приводит к дублированию определений идентификаторов, что усложняет чтение кода.

Советуем импортировать конкретные имена, например, так:

9 ошибок, которые выдают в Python-разработчике новичка 17

9. Непонимание правил области видимости в Python

Работа областей видимости в Python основывается на правиле
LEGB (Local, Enclosing, Global и Built-in). Эта аббревиатура обозначает
локальный, вложенный, глобальный и встроенный уровни.

К локальной области видимости относятся имена, которые вы
определяете внутри функции, ко вложенной — определяемые во вложенных функциях, к глобальной — имена из верхнего уровня модуля, доступные из любой части кода, а ко встроенной — имена, встроенные в Python (open, range, SyntaxError и так далее).

Казалось бы, всё просто, но не тут-то было. Такой код завершится с ошибкой UnboundLocalError: local variable‘someVar’ referenced before assignment on line 4:

9 ошибок, которые выдают в Python-разработчике новичка 18

Здесь вспоминаем правило LEGB. Сначала ищется переменная в
локальной области видимости, но someVar определена только после функции print, значит, выводить на экран нам нечего. Поэтому мы и получили ошибку.

Будьте внимательны при написании кода и не забывайте про
правило LEGB.

Подведём итоги

Порой самые банальные ошибки в коде отнимают больше всего
времени. Надеемся, что наша статья поможет снизить их число.

Пишите в комментариях свои истории о самых обидных ошибках,
на исправление которых вы потратили бессонные ночи. Поддержать коллегу — тоже бесценно!

Языки программирования
Python
Баги и ошибки
11698