Привет! Я Гейб, мне 30 лет, я энтузиаст данных с более чем десятилетним опытом анализа и визуализации данных. Я увлечен обучением других мощи Python, машинного обучения и созданию эффективных информационных панелей.

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

Раздел 1: Синтаксическая борьба

Синтаксические ошибки — слон в комнате

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

# Example 1: Missing Colon
if condition  # Oops, forgot the colon!
    print("Condition is true")

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

Раздел 2: Бездна отступов

Отступы — Приручение зверя Питона

Отступы — еще один распространенный камень преткновения, и я думаю, что мы все когда-то падали в эту пропасть. Python плохо работает с непоследовательными или неправильными отступами. Вот фрагмент, иллюстрирующий проблему:

# Example 2: IndentationError
def my_function():
print("Hello, World!")  # Oops, wrong indentation level!

my_function()

Чтобы избежать этой ошибки, следите за тем, чтобы во всем коде сохранялись одинаковые отступы. Я предлагаю использовать пробелы (не табуляцию) и придерживаться определенного количества пробелов, например четырех, для каждого уровня отступа.

Раздел 3: Проблемы с именами переменных

Именование переменных — хорошее, плохое и уродливое

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

# Example 3: Poor Variable Names
a = 5
b = 10
c = a + b
print(c)

Вместо этого выбирайте понятные имена, которые четко передают назначение переменной:

# Example 4: Improved Variable Names
first_number = 5
second_number = 10
sum_of_numbers = first_number + second_number
print(sum_of_numbers)

Используя описательные имена переменных, вы избавите себя и своих сотрудников от ненужной путаницы.

Раздел 4: Волшебные числа — скрытые препятствия

Волшебные числа — раскрытие тайны

Магические числа относятся к жестко запрограммированным числовым значениям, разбросанным по всему коду. Эти числа часто трудно расшифровать и сохранить.

Я считаю, что очень важно назначать их именованным константам для повышения удобочитаемости и удобства сопровождения кода:

# Example 5: Magic Numbers
def calculate_circle_area(radius):
    return 3.14 * radius**2  # What does 3.14 represent?

# Example 6: Named Constants
PI = 3.14
def calculate_circle_area(radius):
    return PI * radius**2

Определив константы, такие как PI в данном случае, вы сделаете свой код более понятным и упростите его модификацию в будущем.

Раздел 5: Ошибки «не на единицу» — опасности индексации

Ошибки «не на единицу» — The Index Gremlins

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

# Example 7: Off-by-One Error
my_list = [1, 2, 3, 4, 5]
last_element = my_list[5]  # Oops, index out of range!

# Example 8: Corrected Code
last_element = my_list[4]  # Accessing the last element correctly

Чтобы избежать ошибок смещения на единицу, всегда помните, что индексация Python начинается с 0. Дважды проверяйте свои индексы, особенно при переборе списков или массивов.

Раздел 6: Путаница с импортом

Импорт — хороший, плохой и отсутствующий

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

# Example 9: Import Error
from math import squareroot  # Oops, should be sqrt, not squareroot!

# Example 10: Corrected Code
from math import sqrt

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

Раздел 7: Столпотворение необработанных исключений

Обработка исключений — укрощение столпотворения

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

Вот как сделать ваш код отказоустойчивым:

# Example 11: Unhandled Exception
try:
    result = 10 / 0  # Oops, division by zero!
except:
    print("An error occurred!")

# Example 12: Proper Exception Handling
try:
    result = 10 / 0
except ZeroDivisionError:
    print("Division by zero is not allowed!")

Явно обрабатывая исключения, вы можете изящно восстанавливаться после ошибок, предоставлять информативные сообщения об ошибках и обеспечивать бесперебойную работу кода.

Раздел 8: Беспредел изменчивости

Изменчивость против неизменяемости — ходьба по канату

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

Вот пример:

# Example 13: Mutable Object Surprise
def append_to_list(item, my_list=[]):
    my_list.append(item)
    return my_list

print(append_to_list(1))  # [1]
print(append_to_list(2))  # [1, 2]

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

# Example 14: Fixed Code
def append_to_list(item, my_list=None):
    if my_list is None:
        my_list = []
    my_list.append(item)
    return my_list

print(append_to_list(1))  # [1]
print(append_to_list(2))  # [2]

Следуя этому подходу, вы гарантируете, что аргумент по умолчанию правильно повторно инициализируется при каждом вызове функции.

Раздел 9: Пренебрежение документацией

Документирование кода — подарок себе в будущем

Документацию часто упускают из виду, но она играет решающую роль в поддержке и совместном использовании кода. Пренебрежение надлежащей документацией может оставить вас в будущем и других разработчиков в замешательстве.

Вот мой совет:

# Example 15: Undocumented Code
def calculate_area(length, width):
    return length * width

# Example 16: Well-Documented Code
def calculate_area(length, width):
    """
    Calculate the area of a rectangle.
    Args:
        length (float): The length of the rectangle.
        width (float): The width of the rectangle.
    Returns:
        float: The calculated area.
    """
    return length * width

Добавляя четкие и краткие строки документации к своим функциям, вы делаете свой код более понятным и предоставляете ценный контекст себе и другим.

Раздел 10: Пренебрежение тестированием

Тестирование — система безопасности вашего кода

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

Мое мнение:

# Example 17: Neglecting Testing
def square_root(n):
    return n**0.5

# Example 18: Adding Tests
def square_root(n):
    """
    Calculate the square root of a number.
    Args:
        n (float): The number to calculate the square root of.
    Returns:
        float: The square root of the number.
    """
    if n < 0:
        raise ValueError("Cannot calculate square root of a negative number.")
    return n**0.5
# Example 19: Test Example
assert square_root(9) == 3

Написав тесты для своего кода, вы можете убедиться, что он ведет себя так, как ожидается, и выявить потенциальные проблемы на ранней стадии. Платформы тестирования, такие как unittest или pytest, могут помочь упростить этот процесс.

Вывод: «Python Zen — Embrace the Snake!»

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

Итак, примите змею, продолжайте учиться и удачного кодирования!

Надеюсь, вам понравился этот личный рассказ о моих встречах с ошибками Python. Если вы нашли его полезным, не стесняйтесь поделиться им со своими коллегами-энтузиастами Python. Давайте расти вместе как сообщество и помогать другим избегать этих надоедливых ловушек.

Если у вас есть какие-либо вопросы или вы хотите поделиться своими историями об ошибках Python, я буду рад услышать от вас в комментариях ниже. До следующего раза продолжайте писать код, и пусть ваше путешествие по Python будет полным успеха и радости!

Надеюсь, эта статья была вам полезна. Спасибо, что нашли время, чтобы прочитать его.

Если вам понравилась эта статья, вы можете помочь мне поделиться ею с другими:👏хлопать в ладоши, 💬комментировать и обязательно 👤+ подписаться.

Кто я? Меня зовут Гейб А., я опытный архитектор визуализации данных и писатель с более чем десятилетним опытом. Моя цель — предоставить вам простые для понимания руководства и статьи по различным темам науки о данных. Благодаря более 350+ статьям, опубликованным в более чем 25 публикациях на Medium, мне доверяют в индустрии обработки и анализа данных.



Будьте в курсе. Будьте в курсе последних новостей и обновлений в области творческого ИИ — следите за публикацией AI Genesis.

Повышение уровня кодирования

Спасибо, что являетесь частью нашего сообщества! Перед тем, как ты уйдешь:

  • 👏 Хлопайте за историю и подписывайтесь на автора 👉
  • 📰 Смотрите больше контента в публикации Level Up Coding
  • 💰 Бесплатный курс собеседования по программированию ⇒ Просмотреть курс
  • 🔔 Подписывайтесь на нас: Twitter | ЛинкедИн | "Новостная рассылка"

🚀👉 Присоединяйтесь к коллективу талантов Level Up и найдите прекрасную работу