Обработка исключений python — try/except и raise
1. Обработка исключений Python
В этом материале речь пойдет о блоках try/except
, finally
и raise
. Вместе с тем будет рассмотрено, как создавать собственные исключения в Python.
2. Обработка исключений в Python
Рассмотрим разные типы исключений в Python, которые появляются при срабатывании исключения в коде Python.
3. Блоки try/except
Если код может привести к исключению, его лучше заключить в блок try
. Рассмотрим на примере.
try: for i in range(3): print(3/i) except: print("Деление на 0") print("Исключение было обработано")
Программа вывела сообщение, потому что было обработано исключение.
Следом идет блок except
. Если не определить тип исключения, то он будет перехватывать любые. Другими словами, это общий обработчик исключений.
Если код в блоке try
приводит к исключению, интерпретатор ищет блок except
, который указан следом. Оставшаяся часть кода в try
исполнена не будет.
Исключения Python особенно полезны, если программа работает с вводом пользователя, ведь никогда нельзя знать, что он может ввести.
a. Несколько except в Python
У одного блока try
может быть несколько блоков except
. Рассмотрим примеры с несколькими вариантами обработки.
a, b = 1, 0 try: print(a/b) print("Это не будет напечатано") print('10'+10) except TypeError: print("Вы сложили значения несовместимых типов") except ZeroDivisionError: print("Деление на 0")
Когда интерпретатор обнаруживает исключение, он проверяет блоки except
соответствующего блока try
. В них может быть объявлено, какие типы исключений они обрабатывают. Если интерпретатор находит соответствующее исключение, он исполняет этот блок except
.
В первом примере первая инструкция приводит к ZeroDivisionError
. Эта ошибка обрабатывается в блоке except
, но инструкции в try
после первой не исполняются. Так происходит из-за того, что после первого исключения дальнейшие инструкции просто пропускаются. И если подходящий или общий блоки except
не удается найти, исключение не обрабатывается. В таком случае оставшаяся часть программы не будет запущена. Но если обработать исключение, то код после блоков except
и finally
исполнится. Попробуем.
a, b = 1, 0 try: print(a/b) except: print("Вы не можете разделить на 0") print("Будет ли это напечатано?")
Рассмотрим вывод:
Вы не можете разделить на 0 Будет ли это напечатано?
b. Несколько исключений в одном except
Можно использовать один блок except
для обработки нескольких исключений. Для этого используются скобки. Без них интерпретатор вернет синтаксическую ошибку.
try: print('10'+10) print(1/0) except (TypeError,ZeroDivisionError): print("Неверный ввод")
Неверный ввод
c. Общий except после всех блоков except
В конце концов, завершить все отдельные блоки except
можно одним общим. Он используется для обработки всех исключений, которые не были перехвачены отдельными
.
try: print('1'+1) print(sum) print(1/0) except NameError: print("sum не существует") except ZeroDivisionError: print("Вы не можете разделить на 0") except: print("Что-то пошло не так...")
Что-то пошло не так...
Здесь первая инструкция блока пытается осуществить операцию конкатенации строки python с числом. Это приводит к ошибке TypeError
. Как только интерпретатор сталкивается с этой проблемой, он проверяет соответствующий блок except
, который ее обработает.
Отдельную инструкцию нельзя разместить между блоками try
и except
.
try: print("1") print("2") except: print("3")
Это приведет к синтаксической ошибке.
Но может быть только один общий или блок по умолчанию типа except
. Следующий код вызовет ошибку «default 'except:' must be last»
:
try: print(1/0) except: raise except: print("Исключение поймано") finally: print("Хорошо") print("Пока")
4.
Блок finally в PythonПосле последнего блока except
можно добавить блок finally
. Он исполняет инструкции при любых условиях.
try: print(1/0) except ValueError: print("Это ошибка значения") finally: print("Это будет напечатано в любом случае.")
Это будет напечатано в любом случае. Traceback (most recent call last): File “”, line 2, in print(1/0) ZeroDivisionError: division by zero
Стоит обратить внимание, что сообщение с ошибкой выводится после исполнения блока finally
. Почему же тогда просто не использовать print
? Но как видно по последнему примеру, блок finally
запускается даже в том случае, если перехватить исключение не удается.
А что будет, если исключение перехватывается в except
?
try: print(1/0) except ZeroDivisionError: print(2/0) finally: print("Ничего не происходит")
Ничего не происходит Traceback (most recent call last): File "", line 2, in print(1/0) ZeroDivisionError: division by zero During handling of the above exception, another exception occurred: Traceback (most recent call last): File "", line 4, in print(2/0) ZeroDivisionError: division by zero
Как видите, код в блоке finally
исполняется в любом случае.
5. Ключевое слово raise в Python
Иногда нужно будет разбираться с проблемами с помощью вызова исключения. Обычная инструкция print
тут не сработает.
raise ZeroDivisionError
Traceback (most recent call last): File "", line 1, in raise ZeroDivisionError ZeroDivisionError
Разберемся на примере операции деления:
a,b=int(input()),int(input()) # вводим 1 затем 0 if b==0: raise ZeroDivisionError
Traceback (most recent call last): File "", line 3, in raise ZeroDivisionError ZeroDivisionError
Здесь ввод пользователя в переменные a
и b
конвертируется в целые числа. Затем проверяется, равна ли b
нулю. Если да, то вызывается ZeroDivisionError
.
Что будет, если то же самое добавить в блоки try-except? Добавим следующее в код. Если запустить его, ввести 1 и 0, будет следующий вывод:
a,b=int(input()),int(input()) try: if b==0: raise ZeroDivisionError except: print("Деление на 0") print("Будет ли это напечатано?")
1 0 Деление на 0 Будет ли это напечатано?
Рассмотрим еще несколько примеров, прежде чем двигаться дальше:
raise KeyError
Traceback (most recent call last): File “”, line 1, in raise KeyError KeyError
a.
Raise без определенного исключения в PythonМожно использовать ключевое слово raise
и не указывая, какое исключение вызвать. Оно вызовет исключение, которое произошло. Поэтому его можно использовать только в блоке
.
try: print('1'+1) except: raise
Traceback (most recent call last): File “”, line 2, in print(‘1’+1) TypeError: must be str, not int
b. Raise с аргументом в Python
Также можно указать аргумент к определенному исключению в raise
. Делается это с помощью дополнительных деталей исключения.
raise ValueError("Несоответствующее значение")
Traceback (most recent call last): File "", line 1, in raise ValueError("Несоответствующее значение") ValueError: Несоответствующее значение
6. assert в Python
Утверждение (assert) — это санитарная проверка для вашего циничного, параноидального «Я». Оно принимает инструкцию в качестве аргумента и вызывает исключение Python, если возвращается значение False
. В противном случае выполняет операцию No-operation (NOP).
assert(True) # код работает дальше
Если бы инструкция была False
?
assert(1==0)
Traceback (most recent call last): File “”, line 1, in assert(1==0) AssertionError
Возьмем другой пример:
try: print(1) assert 2+2==4 print(2) assert 1+2==4 print(3) except: print("assert False.") raise finally: print("Хорошо") print("Пока")
Вывод следующий:
1 2 assert False. Хорошо Traceback (most recent call last): File “”, line 5, in assert 1+2==4 AssertionError
Утверждения можно использовать для проверки валидности ввода и вывода в функции.
a. Второй аргумент для assert
Можно предоставить второй аргумент, чтобы дать дополнительную информацию о проблеме.
assert False,"Это проблема"
Traceback (most recent call last): File “”, line 1, in assert False,”Это проблема” AssertionError: Это проблема
7.
Объявление собственных исключений PythonНаконец, рассмотрим процесс создания собственных исключений. Для этого создадим новый класс из класса
. Потом его можно будет вызывать как любой другой тип исключения.
class MyError(Exception): print("Это проблема") raise MyError("ошибка MyError")
Traceback (most recent call last): File “”, line 1, in raise MyError(“ошибка MyError”) MyError: ошибка MyError
Вот и все, что касается обработки исключений в Python.
8. Вывод: обработка исключений Python
Благодаря этой статье вы сможете обеспечить дополнительную безопасность своему коду. Все благодаря возможности обработки исключений Python, их вызова и создания собственных.
Python | Обработка исключений
Последнее обновление: 25.01.2022
При программировании на Python мы можем столкнуться с двумя типами ошибок. Первый тип представляют синтаксические ошибки (syntax error). Они появляются в результате нарушения синтаксиса языка программирования при написании исходного кода. При наличии таких ошибок программа не может быть скомпилирована. При работе в какой-либо среде разработки, например, в PyCharm, IDE сама может отслеживать синтаксические ошибки и каким-либо образом их выделять.
Второй тип ошибок представляют ошибки выполнения (runtime error). Они появляются в уже скомпилированной программе в процессе ее выполнения. Подобные ошибки еще называются исключениями. Например, в прошлых темах мы рассматривали преобразование строки в число:
string = "5" number = int(string) print(number)
Данный скрипт успешно скомпилируется и выполнится, так как строка «5» вполне может быть конвертирована в число. Однако возьмем другой пример:
string = "hello" number = int(string) print(number)
При выполнении этого скрипта будет выброшено исключение ValueError, так как строку «hello» нельзя преобразовать в число:
ValueError: invalid literal for int() with base 10: 'hello'
С одной стороны, здесь очевидно, что строка не представляет число, но мы можем иметь дело с вводом пользователя, который также может ввести не совсем то, что мы ожидаем:
string = input("Введите число: ") number = int(string) print(number)
При возникновении исключения работа программы прерывается, и чтобы избежать подобного поведения и обрабатывать исключения в Python есть конструкция try. .except.
try..except
Конструкция try..except имеет следующее формальное определение:
try: инструкции except [Тип_исключения]: инструкции
Весь основной код, в котором потенциально может возникнуть исключение, помещается после ключевого слова try. Если в этом коде генерируется исключение, то работа кода в блоке try прерывается, и выполнение переходит в блок except.
После ключевого слова except опционально можно указать, какое исключение будет обрабатываться (например, ValueError или KeyError). После слова except на следующей стоке идут инструкции блока except, выполняемые при возникновении исключения.
Рассмотрим обработку исключения на примере преобразовании строки в число:
try: number = int(input("Введите число: ")) print("Введенное число:", number) except: print("Преобразование прошло неудачно") print("Завершение программы")
Вводим строку:
Введите число: hello Преобразование прошло неудачно Завершение программы
Как видно из консольного вывода, при вводе строки вывод числа на консоль не происходит, а выполнение программы переходит к блоку except.
Вводим правильное число:
Введите число: 22 Введенное число: 22 Завершение программы
Теперь все выполняется нормально, исключение не возникает, и соответственно блок except не выполняется.
Блок finally
При обработке исключений также можно использовать необязательный блок finally. Отличительной особенностью этого блока является то, что он выполняется вне зависимости, было ли сгенерировано исключение:
try: number = int(input("Введите число: ")) print("Введенное число:", number) except: print("Преобразование прошло неудачно") finally: print("Блок try завершил выполнение") print("Завершение программы")
Как правило, блок finally применяется для освобождения используемых ресурсов, например, для закрытия файлов.
НазадСодержаниеВперед
Python Попробуйте, кроме
❮ Предыдущий Далее ❯
Блок try
позволяет протестировать
блок кода ошибок.
Блок кроме
позволяет
справиться с ошибкой.
Блок else
позволяет
выполнить код, когда нет ошибки.
Блок finally
позволяет
выполнять код независимо от результата блоков try- и exclude.
Обработка исключений
Когда возникает ошибка или исключение, как мы его называем, Python обычно останавливается и генерировать сообщение об ошибке.
Эти исключения можно обработать с помощью оператора try
:
Пример
Блок try
создаст исключение,
потому что x
не определено:
try:
print(x)
кроме:
print(«Произошло исключение»)
Попробуйте сами »
Поскольку блок try вызывает ошибку, блок exclude будет казнен.
Без блока try программа вылетит и выдаст ошибку:
Пример
Этот оператор вызовет ошибку,
потому что x
не определено:
print(x)
Попробуйте сами »
Множество исключений
Вы можете определить столько блоков исключений, сколько хотите, например если вы хотите выполнить специальный блок кода для особого вида ошибки:
Пример
Печатать одно сообщение, если блок try вызывает NameError
и другое
для других ошибок:
попробуйте:
print(x)
кроме NameError:
print(«Переменная x
не определен»)
кроме:
print(«Что-то еще пошло
неправильно»)
Попробуйте сами »
Else
Вы можете использовать ключевое слово else
для определения
блок кода, который должен быть выполнен, если ошибок не возникло:
Пример
В этом примере блок try
не
генерировать любую ошибку:
попробовать:
print(«Привет»)
кроме:
print(«Что-то пошло
неправильно»)
else:
print(«Все пошло не так»)
Попробуйте сами »
finally
Блок finally
, если он указан, будет выполнен
независимо от того, блокирует ли попытка
выдает ошибку или нет.
Пример
try:
print(x)
кроме:
print(«Что-то пошло
неправильно»)
finally:
print(«Попытка исключения завершена»)
Попробуйте сами »
Это может быть полезно для закрытия объектов и очистки ресурсов:
Пример
Попытаться открыть и записать в файл, недоступный для записи:
try:
f = open(«demofile.txt»)
try:
f.write(«Lorum Ipsum»)
кроме:
print(«Что-то пошло не так при записи в файл»)
finally:
f.close()
кроме:
print(«Что-то пошло не так при открытии
файл»)
Попробуйте сами »
Программа может продолжить работу, не оставляя файловый объект открытым.
Инициировать исключение
Как разработчик Python, вы можете создать исключение при возникновении условия.
Чтобы сгенерировать (или вызвать) исключение, используйте ключевое слово raise
.
Пример
Выдать ошибку и остановить программу, если x меньше 0:
x = -1
, если x < 0:
поднять Exception(«Извините, ниже нет чисел
нуля»)
Попробуйте сами »
Ключевое слово поднять
используется для повышения
исключение.
Вы можете определить, какую ошибку выдавать и какой текст печатать пользователю.
Пример
Вызов TypeError, если x не является целым числом:
x = «hello»
если не type(x) is int:
raise TypeError(«Только
разрешены целые числа»)
Попробуйте сами »
❮ Предыдущая Далее ❯
НОВИНКА
Мы только что запустили
Видео W3Schools
Узнать
ВЫБОР ЦВЕТА
КОД ИГРЫ
Играть в игру
Лучшие учебники
Учебное пособие по HTMLУчебное пособие по CSS
Учебное пособие по JavaScript
Учебное пособие
Учебное пособие по SQL
Учебное пособие по Python
Учебное пособие по W3. CSS
Учебное пособие по Bootstrap
Учебное пособие по PHP
Учебное пособие по Java
Учебное пособие по C++
Учебное пособие по jQuery Top 9009
900 900
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3.CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTMLПримеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery2
| О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения. Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания. Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования, куки-файлы и политика конфиденциальности.
Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools использует W3.CSS.
Python Try Except — GeeksforGeeks
Ошибка в Python может быть двух типов: синтаксические ошибки и исключения. Ошибки — это проблемы в программе, из-за которых программа останавливает выполнение. С другой стороны, исключения возникают, когда происходят некоторые внутренние события, которые изменяют нормальный ход программы.
Примечание: Дополнительные сведения см. в разделе Ошибки и исключения в Python 9.0039 Некоторые из общих ошибок исключений:
- IOERROR: Если файл не может быть открыт
- Keyboardinterrup Функция -in получает неправильный аргумент
- EOFError: , если срабатывает End-Of-File без чтения каких-либо данных
- ImportError: , если не удается найти модуль
Try Except in Python
Оператор Try and Except используется для обработки этих ошибок в нашем коде Python. Блок try используется для проверки некоторого кода на наличие ошибок, т. е. код внутри блока try будет выполняться, когда в программе нет ошибок. Принимая во внимание, что код внутри блока exclude будет выполняться всякий раз, когда программа сталкивается с какой-либо ошибкой в предыдущем блоке try.
Синтаксис:
попробуйте: # Некоторый код кроме: # Выполняется, если ошибка в # попробуйте блок
Как работает функция try()?
- Сначала выполняется предложение try , то есть код между try и , кроме предложения .
- Если исключения нет, то будет выполняться только предложение try , кроме , предложение завершено.
- Если возникнет какое-либо исключение, предложение try будет пропущено и будет выполнено предложение , кроме .
- Если возникает какое-либо исключение, но кроме 9Предложение 0259 в коде не обрабатывает его, оно передается внешним операторам try . Если исключение остается необработанным, выполнение останавливается.
- Оператор try может иметь более одного , кроме пункта
Код 1: Никаких исключений, поэтому будет выполняться пункт try .
Python3
|
Auxiliar Да! Ваш ответ:', 1) Код 1: Существует исключение, поэтому будет выполняться только пункт , кроме пункта . В python вы также можете использовать предложение else в блоке try-except, которое должно присутствовать после всех предложений исключения. Код входит в блок else только в том случае, если предложение try не вызывает исключения. Синтаксис: Code: Output: Python предоставляет ключевое слово finally, которое всегда выполняется после блоков try и exclude. Последний блок всегда выполняется после нормального завершения блока попытки или после завершения блока попытки из-за некоторых исключений. Синтаксис: Code: Вывод: Связанные статьи: .
Python3
def
разделить(x, y):
try
:
result
=
x
/
/
y
print
(
"Yeah ! Ваш ответ:"
, результат)
кроме
ZeroDivisionError:
0007
(
"Извините!
Извините! Вы делите на ноль
Предложение Else
попытка:
# Некоторый код
кроме:
# Выполняется, если ошибка в
# пробный блок
еще:
# execute if no exception
Python3
def
AbyB(a , b):
try
:
в
=
((а
+
б)
/
/
(A
-
B))
, за исключением
ZerodivisionError:
(
"А. / Belice Insure
(
".
)
Else
:
Печать
(C)
ABYB (
2,00007
3.0
)
AbyB(
3.0
,
3.0
)
-5.0
a/b приводит к 0
Ключевое слово finally в Python
попытка:
# Некоторый код
кроме:
# Выполняется, если ошибка в
# пробный блок
еще:
# выполнить, если нет исключения
в конце концов:
# Some code .....(always executed)
Python3
try
:
k
=
5
/
/
0
print
(k)
except
ZeroDivisionError:
print
(
"Can't divide by zero"
)
Наконец
:
Печать
(
0007
)
Нельзя делить на ноль
Это всегда выполняется