4 ошибки в коде на Python, которые выдают в вас новичка

3 false true ошибка в коде

У Python есть прекрасная особенность, а именно возможность задавать значения по умолчанию. Вы можете написать так:

И вам не придётся каждый раз указывать степень, в которую вы хотите возвести число (пока эта степень – 2), или уточнять количество ног у вашего кота.

Такое поведение бывает сложно поймать: если вы создали всего один экземпляр объекта, то, скорее всего, не заметите проблему. Но столкнётесь с ней позже.

Как решить проблему? Привыкайте вместо значений по умолчанию указывать None :

Тогда код будет работать корректно, и все коты останутся на своих местах!

2. Вызываете функцию в значении по умолчанию

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

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

В чём подвох? Вернувшись домой, вы решили проверить, как записалось каждое событие, посмотреть актуальные даты и описания. Ожидание:

Реальность – все события как будто произошли в одно и то же время:

Как её решить? Чтобы время вычислялось каждый раз при вызове вашей функции, нужно перенести вычисления в тело функции:

Так вы всё-таки узнаете, во сколько Том и Адорианец пили кофе и когда агент Кей ворвался к вам домой со своим нейралайзером.

3. Используете одновременно int и bool как ключи dict

Предположим, вы решили написать простой переводчик с компьютерного языка на человеческий для своего умного дома. Вам нужно, чтобы True отображалось как «Правда», False – как «Ложь», а 1 и 0 переводились как «Есть» и «Нет». Зафиксируем все переводы в словаре:

В чём подвох? В этом словаре используется четыре разных ключа. Проверим, действительно ли всё работает корректно:

Кажется, что-то пошло не так. Давайте заглянем в сам словарь:

Из него пропали два варианта перевода, а те, что остались – неверные.

Чем объясняется проблема? Чтобы разобраться в произошедшем, нужно понимать две вещи: что такое класс bool и как работает словарь.

Hash-функции ключей перестанут совпадать, и ответ словаря будет таким, как мы хотели, – общий язык с умным домом всё-таки будет найден:

4. Используете set для ускорения вычислений

В чём подвох? Рассмотрим конструкцию с точки зрения интерпретатора:

Чтобы найти нужный элемент, интерпретатор последовательно идёт по ссылкам, начиная с первой, и сравнивает объект с искомым: найдя нужные данные, он останавливает поиск. Чем длиннее список, тем больше времени занимает процесс. В O-нотации это записывается как O(n).

O-нотация называет такую сложность O(1): вне зависимости от размеров множества поиск будет происходить за одинаковое количество времени.

Как решить проблему? Звучит банально, но правильнее было бы не мудрить и воспользоваться обычным поиском.

Как говорится в дзене Python, «простое лучше сложного».

Советы для новичков в Python

Пожалуй, самый главный совет, который стоит дать специалистам-джуниорам, только начинающим свою карьеру в Python, – это не только зубрить основы, но и заглядывать внутрь инструмента, которым вы пользуетесь.

Чтобы не оказаться тем самым новичком, у которого ничего не работает, я советую:

Python Traceback — Как правильно исправлять ошибки в коде

Traceback в Python 3

Python выводит трассировку (далее traceback), когда в вашем коде появляется ошибка. Вывод traceback может быть немного пугающим, если вы видите его впервые, или не понимаете, чего от вас хотят. Однако traceback Python содержит много информации, которая может помочь вам определить и исправить причину, из-за которой в вашем коде возникла ошибка.

Содержание статьи

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

Подробный обзор структуры трассировки в Python 3

Существует несколько секций для каждой трассировки Python, которые являются крайне важными. Диаграмма ниже описывает несколько частей:

Обзор трассировки Python

В Python лучше всего читать трассировку снизу вверх.

Есть ряд отличий между выдачей трассировок, когда вы запускает код в командной строке, и между запуском кода в REPL. Ниже вы можете видеть тот же код из предыдущего раздела, запущенного в REPL и итоговой выдачей трассировки:

Источники:

https://proglib. io/p/4-oshibki-v-kode-na-python-kotorye-vydayut-v-vas-novichka-2020-09-24

https://python-scripts. com/python-traceback

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: