Что выведет следующий код при его исполнении используется python 3 x print type 1 2
В этом руководстве мы расскажем, как обрабатывать исключения в 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 конечно. Но не обманывайте себя, мы же не на экзамене.
Читайте также: