Объяснение 5 ошибок Python (и как их исправить)
Существует много типов ошибок в Python. Независимо от того, на каком этапе вашего пути в Python вы находитесь, вы скорее всего сталкивались с одной или несколькими из этих ошибок. Для некоторых может быть легко понять, что не так в вашем коде. А для других? Не очень. Поэтому я объясняю, что они означают.
5. Ошибка отступа
Если вы абсолютный новичок в Python или перешли с языков, таких как C/C++ или Java, это будет самая распространенная ошибка, с которой вы столкнетесь. В Python мы определяем блоки с помощью отступов вместо фигурных скобок, как это распространено во многих других языках. «Блок» относится к сегменту кода, который рассматривается как единое целое. Подумайте о условных блоках, функции или цикле.
В Python все инструкции в блоке должны иметь одинаковый уровень отступа. Когда уровень отступа изменяется (либо увеличивается, либо уменьшается), это обозначает начало или конец блока. Python сильно полагается на последовательные отступы. Непостоянные отступы приведут к IndentationError.
Распространенный сценарий, когда вы можете столкнуться с этой ошибкой, — это когда вы копируете и вставляете код в свой редактор. Иногда из-за различий в том, как разные редакторы форматируют текст, отступы могут сломаться от одного редактора к другому.
for i in range(5): print(i)
При копировании вышеуказанных строк кода произошел сбой с отступами. Попытка запустить этот код приведет к ошибке IndentationError. Чтобы исправить это, вам нужно последовательно отступить операторы под их блоком.
for i in range(5): print(i)
Еще одна проблема, с которой вы можете столкнуться в связи с этой ошибкой, заключается в использовании табуляций и пробелов. Некоторые редакторы используют табуляции, в то время как другие используют четыре пробела для отступов. Если вы смешаете их в своем коде, вы получите ошибку. Эта проблема еще более запутанная, потому что трудно зрительно определить, какая строка содержит табуляции, а какая пробелы.
4. Ошибка синтаксиса
Каждый язык программирования имеет синтаксис. Другими словами, это набор правил, которым вы должны следовать, чтобы писать код на этом языке. Итак, если вы нарушите любое из этих правил, язык не понимает, что вы пытаетесь сделать, и выдает вам синтаксическую ошибку.
В Python SyntaxError возникает, когда интерпретатор находит код, который не соответствует правилам языка Python. Это означает, что код структурирован таким образом, что Python не может его понять или выполнить. SyntaxError помешает вашему программе даже запуститься. Некоторые из наиболее распространенных синтаксических ошибок, с которыми вы столкнетесь в Python, это:
- Пропущена пунктуация (забыли двоеточие (:) при начале блока кода, например, условий, циклов или функций).
- Неправильное написание или неверное размещение ключевого слова Python (писать
esleвместоelse, использоватьbreakтам, где это не должно происходить.) - Использование зарезервированных ключевых слов в качестве имен переменных.
- Неправильное использование операторов (использование оператора присваивания (=), когда нужно использовать оператор равенства (==) в выражении.)
- Забыть закрыть скобку или кавычку. Это часто случается, когда вы работаете с несколькими выражениями, и они находятся внутри вложенных скобок.
Хорошая новость заключается в том, что интерпретатор Python довольно умный, чтобы точно определить, какого типа синтаксическую ошибку вы допустили, указать номер строки и даже приблизительное местоположение ошибки. Хотя иногда сообщение об ошибке может быть немного неоднозначным и не отражать точную причину. Если вы используете хороший редактор кода или IDE, он может предложить ошибку и возможные исправления.
3. Ошибка индекса
Python предлагает несколько встроенных структур данных, таких как списки, кортежи и множества. Нам часто нужно перебирать эти структуры данных и получать доступ к элементам. Каждая структура данных содержит то, что называется индексом, который является позицией конкретного элемента в этой структуре.
numbers = [1, 2, 3]
Здесь у нас есть список под названием numbers. Мы можем получить доступ к элементам списка по их индексам, например так:
print(numbers[1]) # prints 2
IndexError обычно возникает, когда вы пытаетесь получить доступ к элементу в структуре данных (также называемой последовательностью) по индексу, который находится за пределами допустимого диапазона индексов для этой структуры данных. Во многих языках программирования, включая Python, индексы начинаются с нуля. Таким образом, если последовательность содержит N элементов, диапазон индексов составляет от 0 до N-1.
Часто программисты забывают обработать случай с индексом, начинающимся с нуля, и попадают в ловушку ошибки с неправильным смещением, что приводит к ошибке индекса. Чтобы избежать ошибок индекса, всегда измеряйте длину вашей последовательности.
if index < len(my_list): # execute code
При итерации по последовательности распространенной ошибкой многих программингов на Python является и ее изменение. Это также приводит к ошибке индекса. Поэтому избегайте этого.
2. Ошибка значения
Python предлагает множество типов данных. Работая с различными типами данных, нам необходимо иметь дело с разными литеральными значениями. Иногда мы используем их в качестве аргументов функций. Что нам нужно знать, так это то, что каждая функция ожидает определенный тип данных в качестве аргумента. При получении этих данных функция также проверяет, соответствует ли полученное значение допустимому.
И это приводит к ValueError в Python. Это встроенное исключение, которое вызывается, когда функция или операция получает аргумент, имеющий правильный тип данных, но неподходящее значение. Это означает, что тип аргумента допустим, но его конкретное значение не валидно для выполняемой операции.
Довольно распространенный случай этого — когда вы хотите преобразовать один тип данных в другой.
int('10')
Это преобразует строку ’10’ в целое число 10. Но, если вы сделаете это:
int('ten')
Вы получаете ошибку значения. Это связано с тем, что функция int() ожидает аргумент типа строка. Но это строковое значение должно состоять из цифр. Вот почему ‘ten’ является неприемлемым значением. Аналогично, вы можете получить эту ошибку при выполнении математических операций.
import math math.sqrt(-5)
Функция sqrt() ожидает положительное число. Таким образом, отрицательное число в качестве аргумента вызовет ошибку значения. Еще один распространенный случай возникновения ошибок значения возникает, когда вы принимаете ввод от пользователя. Поскольку вы не имеете контроля над тем, что пользователь может ввести, ввод неправильного значения приведет к ошибке.
Лучший способ обработки ValueError — это использование блоков try-except.
try: num = input("Enter a number: ") num_int = int(num) except ValueError as e: print(f"Caught a ValueError: {e}")
Таким образом, вы можете предотвратить сбои программы, даже если пользователь вводит неверное значение.
1. Ошибка атрибута
Ошибка AttributeError является распространенным исключением в Python, которое возникает, когда вы пытаетесь получить доступ к атрибуту или методу, который не существует у данного объекта. Проще говоря, это означает, что вы просите объект сделать что-то, для чего он не предназначен.
Независимо от того, работаете ли вы со строками, списками или пользовательскими классами, легко предположить, что объект обладает определенными свойствами или возможностями, особенно при переключении между различными типами данных. Однако Python вызовет AttributeError в тот момент, когда вы попытаетесь вызвать атрибут, который недоступен.
text = "hello world" print(text.push())
У строк нет метода push(). Поэтому в приведенном выше примере вы получите ошибку атрибута. Вот ещё один пример:
user = None print(user.name)
Попытка получить доступ к атрибуту 'name' у объекта NoneType также приведет к этой ошибке. Во всех этих случаях объект, с которым вы работаете, просто не поддерживает атрибут, к которому вы пытаетесь получить доступ. Чтобы предотвратить эту ошибку от прерывания вашей программы, рассмотрите возможность проверки типов объектов.
type(obj) # or isinstance()
Встроенная функция dir() показывает все допустимые атрибуты и методы, доступные для объекта. Используя её для вашего объекта, вы узнаете, какие атрибуты вы можете использовать.
Поскольку Python является простым языком, изучить основы языка довольно легко. Теперь, когда вы знаете о некоторых общих ошибках, вы сможете их отлаживать и писать более питоновский код без каких-либо беспокойств.






Добавить комментарий