Что выведет следующий код при его исполнении используется python 3 x print type 1 2

Обновлено: 04.07.2024

В этом руководстве мы расскажем, как обрабатывать исключения в Python с помощью try и except . Рассмотрим общий синтаксис и простые примеры, обсудим, что может пойти не так, и предложим меры по исправлению положения.

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

Для обработки большей части этих ошибок как исключений в Python есть блоки try и except .

Обработка KeyError

Вероятно, вы уже сталкивались с KeyError при работе со словарями в Python.

Рассмотрим следующий пример, где у нас есть словарь my_dict .

Теперь попытаемся получить доступ к значению, соответствующему несуществующему ключу non-existent key .

Как и ожидалось, мы получим KeyError :

Вы можете обработать KeyError почти так же, как и IndexError .

Все это можно видеть в следующем коде:

Обработка FileNotFoundError

При работе с файлами в Python часто возникает ошибка FileNotFoundError .

В следующем примере мы попытаемся открыть файл my_file.txt, указав его путь в функции open() . Мы хотим прочитать файл и вывести его содержимое.

Однако мы еще не создали этот файл в указанном месте.

Поэтому, попытавшись запустить приведенный выше фрагмент кода, мы получим FileNotFoundError :

А с помощью try и except мы можем сделать следующее:

  • Попробуем открыть файл в блоке try .
  • Обработаем FileNotFoundError в блоке except , сообщив пользователю, что он попытался открыть несуществующий файл.
  • Если блок try завершается успешно и файл действительно существует, прочтем и распечатаем содержимое.
  • В блоке finally закроем файл, чтобы не терять ресурсы. Файл будет закрыт независимо от того, что происходило на этапах открытия и чтения.

Теперь рассмотрим случай, когда срабатывает блок else . Файл my_file.txt теперь присутствует по указанному ранее пути.


Вот содержимое этого файла:


Теперь повторный запуск нашего кода работает должным образом.

На этот раз файл my_file.txt присутствует, поэтому запускается блок else и содержимое распечатывается, как показано ниже:


Надеемся, теперь вы поняли, как обрабатывать исключения при работе с файлами.

Обработка ZeroDivisionError

Рассмотрим функцию divide() , показанную ниже. Она принимает два аргумента – num и div – и возвращает частное от операции деления num/div .

Вызов функции с разными аргументами возвращает ожидаемый результат:

Этот код работает нормально, пока вы не попробуете разделить число на ноль:

Вы видите, что программа выдает ошибку ZeroDivisionError :

Можно обработать деление на ноль как исключение, выполнив следующие действия:

Вот как все это выглядит в коде:

При корректных входных данных наш код по-прежнему работает великолепно:

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

Синтаксис конструкции try и except

Для начала разберем синтаксис операторов try и except в Python. Общий шаблон представлен ниже:

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

Блок try

Блок except

Блок except запускается, когда блок try не срабатывает из-за исключения. Инструкции в этом блоке часто дают некоторый контекст того, что пошло не так внутри блока try .

Если собираетесь перехватить ошибку как исключение, в блоке except нужно обязательно указать тип этой ошибки. В приведенном выше сниппете место для указания типа ошибки обозначено плейсхолдером <error type> .

При попытке выполнить код внутри блока try также существует вероятность возникновения нескольких ошибок.

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

В результате вы можете столкнуться с IndexError , KeyError и FileNotFoundError . В таком случае нужно добавить столько блоков except , сколько ошибок ожидается – по одному для каждого типа ошибки.

Блок else

Блок else запускается только в том случае, если блок try выполняется без ошибок. Это может быть полезно, когда нужно выполнить ещё какие-то действия после успешного выполнения блока try . Например, после успешного открытия файла вы можете прочитать его содержимое.

Блок finally

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

Примечание: блоки else и finally не являются обязательными. В большинстве случаев вы можете использовать только блок try , чтобы что-то сделать, и перехватывать ошибки как исключения внутри блока except .

Марк Лутц «Изучаем Python»

Скачивайте книгу у нас в телеграм

Итак, теперь давайте используем полученные знания для обработки исключений в Python. Приступим!

Обработка IndexError

Если вам приходилось работать со списками или любыми другими итерируемыми объектами, вы, вероятно, сталкивались с IndexError .

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

Поскольку 2 является допустимым индексом, вы видите, что элемент с этим индексом ( C++ ) распечатывается:

Но если вы попытаетесь получить доступ к элементу по индексу, выходящему за пределы допустимого диапазона, вы столкнетесь с IndexError :

Теперь вы уже знакомы с шаблоном, и вам не составит труда использовать try и except для обработки данной ошибки.

В приведенном ниже фрагменте кода мы пытаемся получить доступ к элементу по индексу search_idx .

Обработка TypeError

В этом разделе мы разберем, как использовать try и except для обработки TypeError в Python.

Рассмотрим функцию add_10() . Она принимает число в качестве аргумента, прибавляет к нему 10 и возвращает результат этого сложения.

Вы можете вызвать функцию add_10() с любым числом, и она будет работать нормально, как показано ниже:

Теперь попробуйте вызвать функцию add_10() , передав ей в качестве аргумента не число, а строку.

  • В блок try мы помещаем вызов функции add_10() с my_num в качестве аргумента. Если аргумент допустимого типа, исключений не возникнет.
  • В противном случае срабатывает блок except , в который мы помещаем вывод уведомления для пользователя о том, что аргумент имеет недопустимый тип.

Это показано ниже:

Заключение

В этом руководстве мы рассмотрели, как обрабатывать исключения в Python с помощью try и except.

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

Наша редакция совместно с партнерами из телеграм канала Python Задачки составили для вас тест по основам нашего любимого языка.

Состоит из 10 вопросов, большая часть из них начального уровня и довольно простые. Парочка уровня чуть сложнее, но все же это тест для новичков в Python и для тех, кто что-то подзабыл.

Вы можете пользоваться Google и интерпретатором Python конечно. Но не обманывайте себя, мы же не на экзамене.

Читайте также: