9 ошибок, которые выдают в Python-разработчике новичка
Все через это проходили, но теперь вам будет проще. Добавляйте в закладки — точно пригодится.
12К открытий17К показов
Опытный Python-разработчик может с лёгкостью определить код новичка. Магия? Нет, просто начинающие программисты обычно совершают одни и те же ошибки.
Все проходили через это — и проводили часы на StackOverflow из-за неправильных отступов, двоеточий и других банальных опечаток.
Чтобы сэкономить ваше время, в этой статье мы собрали распространённые ошибки новичков. Начнём с самого простого и постепенно перейдём к более сложным темам.
1. Неправильные отступы
В Python отступы используют не только для улучшения читаемости кода, но и чтобы обозначить, что к чему относится. Например, ниже можно увидеть два цикла. В первом случае print c текстом сработает после завершения цикла, а во втором, благодаря отступу, — на каждой итерации.
Здесь текст End of the cycle мы увидим при завершении работы цикла:
А тут — на каждой итерации цикла:
Поэтому если код работает не так, как вы планировали,
проверьте отступы.
2. Зарезервированные слова для имён переменных
В Python есть список ключевых (или зарезервированных) слов, которые нельзя использовать в качестве имён переменных.
Если нарушить это правило, вы получите сообщение об ошибке SyntaxError: invalid syntax. Например, вот так делать нельзя:
3. Лишняя точка с запятой
В отличие от JavaScript, где точка с запятой используется для
отделения инструкций друг от друга, в Python она просто не нужна.
Это настолько частая ошибка, что многие интерпретаторы игнорируют «;» и выполняют код так, как будто её нет. Например, ниже можно
увидеть, что VS Code просто подсветил точки с запятой красным цветом.
Однако системы со строгими требованиями такой код не устроит.
Компьютер остановит выполнение программы с ошибкой — чтобы продолжить работу, точку с запятой надо будет убрать.
4. Операторы «++» и «—»
Если вы начали учить Python после других языков программирования, можете удивиться, что в нём нет привычных операторов инкремента «++» и декремента «—». При их использовании вы увидите ошибку SyntaxError: invalid syntax.
Вместо этого для приращения значения переменной можно использовать оператор «+=» или просто переназначить её через «x=x+1».
Аналогично всё работает и при уменьшении значения переменной:
5. Отсутствие двоеточия
Во многих языках программирования после объявления циклов и
функций идут фигурные скобки, а в них необходимый код. В Python такие скобки не используются, зато есть двоеточие, о котором многие забывают. Это настолько распространённая ошибка, что большинство редакторов кода подсвечивают места, где двоеточие пропущено.
6. Неправильное копирование словарей и списков
Первое, что приходит в голову новичку, когда нужно сделать
копию словаря или списка — использовать оператор присваивания.
Например, так:
Проблема в том, что благодаря оператору присваивания теперь
при изменении dict_b словарь dict_a тоже будет изменён.
Чтобы такого не происходило, нужно использовать методы copy()
или deepcopy().
Теперь мы видим, что изменения вносятся только во вторую
библиотеку.
7. Оператор «+» для конкатенации
«+» — простой и понятный для новичков оператор, но он не
всегда является самым эффективным решением для конкатенации. Чем больше строк вам нужно соединить в одну, тем больше плюсов придётся добавить, а это засоряет код. Поэтому для конкатенации лучше использовать f-строки.
Сравним два варианта на примере:
Во втором случае мы видим более «чистый» код, с которым проще
работать. А результат выполнения программы будет одинаковым.
8. Злоупотребление импортом
Начинающие разработчики часто импортируют все имена из
модулей. Например, вот так:
Так делать не стоит, потому что модуль может содержать большое количество объектов, и импорт всего списка замедлит работу программы. Кроме того, иногда это приводит к дублированию определений идентификаторов, что усложняет чтение кода.
Советуем импортировать конкретные имена, например, так:
9. Непонимание правил области видимости в Python
Работа областей видимости в Python основывается на правиле
LEGB (Local, Enclosing, Global и Built-in). Эта аббревиатура обозначает
локальный, вложенный, глобальный и встроенный уровни.
К локальной области видимости относятся имена, которые вы
определяете внутри функции, ко вложенной — определяемые во вложенных функциях, к глобальной — имена из верхнего уровня модуля, доступные из любой части кода, а ко встроенной — имена, встроенные в Python (open, range, SyntaxError и так далее).
Казалось бы, всё просто, но не тут-то было. Такой код завершится с ошибкой UnboundLocalError: local variable‘someVar’ referenced before assignment on line 4:
Здесь вспоминаем правило LEGB. Сначала ищется переменная в
локальной области видимости, но someVar определена только после функции print, значит, выводить на экран нам нечего. Поэтому мы и получили ошибку.
Будьте внимательны при написании кода и не забывайте про
правило LEGB.
Подведём итоги
Порой самые банальные ошибки в коде отнимают больше всего
времени. Надеемся, что наша статья поможет снизить их число.
Пишите в комментариях свои истории о самых обидных ошибках,
на исправление которых вы потратили бессонные ночи. Поддержать коллегу — тоже бесценно!
12К открытий17К показов