Найти в Дзене
Blur

Разбираемся с ошибками (исключениями) в python за 20 минут

Предыдущая статья: Начать программировать на python за 20 минут С момента написания предыдущей статьи я научился вставлять фрагменты кода, ура! Вступление Делая свои первые шаги в программировании вы могли заметить, что не всегда все идет гладко и иногда вместо ожидаемого результата вылезает стена текста, сообщающая, что вы делаете что-то не так. Такие ошибки при выполнении программы называются исключениями Настройка Первым делом я рекомендую всем включить нумерацию строк. Это поможет в дальнейшем определять место, в котором возникла ошибка. Знакомство Ошибки возникают, когда вы требуете от программы то, что она сделать не может. Например, хотите получить значение переменной, которой не существует (пример из начала статьи) Разберемся для начала с одним особым типом ошибки: Синтаксическая ошибка возникает до запуска программы, она обозначает, что интерпретатор (умное слово) встретил символ, который в данном месте не ожидался. В данном случае он ожидал увидеть тело функции, а увидел кон
Оглавление
Предыдущая статья: Начать программировать на python за 20 минут

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

Вступление

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

Такие ошибки при выполнении программы называются исключениями
Программа сообщает, что я обращаюсь к имени, которое раньше в программе не встречалось
Программа сообщает, что я обращаюсь к имени, которое раньше в программе не встречалось

Настройка

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

Нажмите на эту кнопку для включения или выключения нумерации строк
Нажмите на эту кнопку для включения или выключения нумерации строк

Знакомство

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

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

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

Разберем эту ошибку на части:

File "ipython-input-25-****" - Ошибка произошла в 25м окне ввода(цифра слева от окна [25] обозначает номер окна)

line 1 - Ошибка произошла в строке 1

^ указывает на место, в котором произошла ошибка

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

SyntaxError - тип ошибки

unexpected EOF while parsing - описание ошибки

Если при взгляде на ошибку вы не поняли сразу, чем она вызвана, то смело выделяйте последнюю строчку и нажимайте "Поиск в интернете"
Наверняка кто-то уже встречался с этой ошибкой до вас
Наверняка кто-то уже встречался с этой ошибкой до вас
Умение искать в интернете - главное умение программиста

Знакомство, продолжение

Теперь перейдем к ошибкам, возникающим во время выполнения программы

При попытке выполнить этот код возникнет ошибка

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

Тут нет особых отличий от предыдущей ошибки, но мы все равно подробно разберем увиденное

TypeError - тип ошибки

Traceback (most recent call last) - для нас это индикатор, что ошибка произошла во время выполнения программы.

<ipython-input-28-**> - уже разбирали

in <module> - функция, в которой произошла ошибка

<module> для нас обозначает самый "внешний уровень"

далее скопирован фрагмент кода, в котором произошла ошибка и указана строка, вызвавшая ее

Последнюю строчку мы уже разбирали. В данном случае там написано, что функция add принимает 2 значения, а мы пытаемся в нее впихнуть 3

Знакомство, часть 3

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

Попробуем выполнить следующий код:

Самые внимательные еще до запуска поняли, что тут не так, но мы все равно смело жмем Shift+Enter и ждем секунд 5

Ой, что же пошло не так?
Ой, что же пошло не так?

Не ленимся и ищем в интернете, что это за ошибка!

Рекурсия - вызов функции из самой себя. Правильная рекурсия предусматривает выход. Мы подробнее ознакомимся с этим понятием в следующих уроках

Сейчас нам эта ошибка интересна тем, что в ней сразу несколько блоков

Верхнюю часть мы уже разбирали, разберем блоки

Первый блок:

<ipython-input-30-**> - уже разбирали

in <module> - уже разбирали

далее место, в котором произошла ошибка

Второй блок:

<ipython-input-30-**> - уже разбирали

in mult(a, b) - функция, в которой произошла ошибка

Часто ошибка в функции возникает из-за того, что при изменении функции вы забыли обновить ее нажатием Shift+Enter

далее место в функции, в котором произошла ошибка

...

Тут написано, что Jupiter пропустил некое кол-во блоков, ничем не отличающихся от последнего

Последний блок:

Повторяет второй блок.

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

Знакомство, заключение

Кажется, этого пока хватит. Предлагаю вам самостоятельно разобраться, что не так в коде, приведенном ниже (это не сложно):

Задавайте вопросы в комментариях (а лучше ищите сами, ведь поиск - лучший друг программиста)

Предыдущая статья: Начать программировать на python за 20 минут
Следующая статья: Пишется