Exception в Python
12 may. 16 18:42 21 dec. 17 13:14
Базовый тип для большинства исключений.
Все встроенные исключения, не являющиеся фатальными (не требуею прерывания работы интерпретатора), наследуются от этого типа.Все пользовательские исключения также должны наследоваться от данного класса:
class MyException(Exception):+py2.5 Наследуется от BaseException.
"""Пользовательское исключение."""
Синонимы поиска: Exception, исключения, исключение
В этом разделе: ArithmeticError AssertionError AttributeError BufferError EOFError GeneratorExit ImportError LookupError MemoryError NameError OSError ReferenceError RuntimeError StopAsyncIteration StopIteration SyntaxError SystemError TypeError ValueError Warning
В разделе «BaseException»: BaseException.
Функции exc_info() и exception() модуля sys в Python.
Системная информация об исключении и необработанные исключения.
Содержание:sys.exc_info()
— получает информации об исключении;sys.exception()
— возвращает экземпляр исключения;sys.excepthook()
— обработка необработанных исключений;sys.unraisablehook()
обработка невыполнимых исключений;- Практические примеры использования функций
sys.excepthook
иsys.exc_info
.
sys.exc_info()
:Функция sys.exc_info()
возвращает кортеж из трех значений, которые предоставляют информацию об исключении, которое в данный момент обрабатывается. Возвращаемая информация относится как к текущему потоку, так и к текущему кадру стека. Если текущий кадр стека не обрабатывает исключение, информация берется из вызывающего кадра стека или его вызывающего и т. д. до тех пор, пока не будет найден кадр стека, который обрабатывает исключение. Здесь «обработка исключения» определяется как «выполнение условия исключения». Для любого стекового фрейма доступна только информация об исключении, которое обрабатывается в данный момент.
Если нигде в стеке исключение не обрабатывается, возвращается кортеж, содержащий три значения None
. В противном случае возвращаются значения (type, value, traceback)
.
Их значение:
type
получает тип обрабатываемого исключения;value
получает экземпляр исключения;traceback
получает объектtraceback
.
Изменено в Python 3.11: type
и traceback
поля теперь являются производными от value
(экземпляр исключения), поэтому, когда исключение модифицируется во время его обработки, изменения отражаются в результатах последующих вызовов sys.exc_info()
.
Пояснения к изменению в Python 3.11. Эта функция возвращает представление обработанного исключения в старом стиле (как описано выше). Если в настоящее время обрабатывается исключение
e
(поэтомуsys.exception()
(добавлена в Python 3.11) возвращаетe
),sys.exc_info()
возвращает кортеж(type(e), e, e.__traceback__)
. То есть кортеж, содержащий тип исключения (подклассBaseException
), само исключение и объект трассировки, который обычно инкапсулирует стек вызовов в точке, где в последний раз возникло исключение.
sys.exception()
:Функция sys. exception()
(добавлена в Python 3.11), вызываемая во время выполнения обработчика исключений (например, предложения except
или except*
), возвращает экземпляр исключения, который был перехвачен этим обработчиком. Когда обработчики исключений вложены друг в друга, то доступно только исключение, обработанное самым внутренним обработчиком.
Если обработчик исключений не выполняется, эта функция возвращает None
.
Новое в Python 3.11.
sys.excepthook(type, value, traceback)
:Функция sys.excepthook()
выводит заданную трассировку и исключение в sys.stderr
.
Когда возникает исключение и не обрабатывается, то интерпретатор вызывает
с тремя аргументами: классом исключения type
, экземпляром исключения value
и объектом трассировки traceback
. В интерактивном сеансе это происходит непосредственно перед тем, как управление возвращается к приглашению ввода. В программе Python это происходит непосредственно перед выходом из программы. Обработка исключений верхнего уровня может быть настроена путем назначения другой функции с тремя аргументами для sys.excepthook
.
sys.excepthook
с аргументами hook
, type
, value
, traceback
. Если хук/ловушка не была установлена, то аргумент hook
может быть None
.Если какой-либо хук вызывает исключение от RuntimeError
и его производных, то вызов хука/ловушки будет подавлен. В противном случае исключение перехвата будет отмечено как невыполненное и будет вызван sys.excepthook()
.
Смотрим пример:
import sys def my_excepthook(type, value, traceback): print('Unhandled error:', type, value) sys.excepthook = my_excepthook print('Before exception') raise RuntimeError('This is the error message') print('After exception') # Before exception # Unhandled error: <class 'RuntimeError'> This is the error message
Так как блока try/except
нет вокруг строки, в которой возбуждается исключение, то последний вызов print()
не выполняется, хотя хук/ловушка для исключения установлена.
sys.unraisablehook(unraisable, /)
:Функция sys.unraisablehook()
(добавлена в Python 3.8) обрабатывает невыполнимое исключение.
Вызывается, когда возникает исключение, но Python не может его обработать. Например, когда вызывает исключение деструктор или во время сборки мусора.
Аргумент unraisable
имеет следующие атрибуты:
exc_type
: Тип исключения.exc_value
: значение исключения, может быть None.exc_traceback
: Отслеживание исключения, может быть Нет.err_msg
: Сообщение об ошибке, может быть Нет.object
: Объект, вызвавший исключение, может быть None.
По этот хук форматирует err_msg
и object
как: f '{err_msg}: {object! R}'
. Используйте сообщение об ошибке «Exception ignored in», если err_msg
— Нет.
Функцией sys.unraisablehook()
можно переопределить поведение невыполнимых исключений.
Сохранение exc_value
с использованием пользовательского хука может создать ссылочный цикл. Его следует явно очистить, чтобы прервать ссылочный цикл, когда исключение больше не требуется.
Сохранение object
с помощью настраиваемого хука может воскресить его, если он установлен на объект, который завершается. Избегайте сохранения объекта object
после завершения кастомного хука, чтобы избежать воскрешения объектов.
Смотрите также функцию sys.excepthook()
, которая обрабатывает неперехваченные исключения.
Вызывает событие аудита sys.unraisablehook
с аргументами hook
, unraisable
, когда происходит исключение, которое не может быть обработано. Объект unraisable
— это то же самое, что и то, что будет передано хуку. Если хук не был установлен, то аргумент hook
может быть None
.
Новое в Python 3.8.
Практические примеры использования функций
sys. excepthook
и sys.exc_info
.- Использование
sys.exc_info()
для вывода сообщения об ошибке; - Обработчик, которому не нужно явно передавать исключение;
- Перехват нажатия клавиш
Ctrl+C
;
Использование
sys.exc_info()
для вывода сообщения об ошибке.В представленном коде ниже, последняя инструкция except
может опустить имя исключения. Используйте такую конструкцию с крайней осторожностью, таким образом можно легко замаскировать реальную ошибку! Здесь можно использовать sys.exc_info()
import sys try: f = open('myfile.txt') s = f.readline() i = int(s.strip()) except OSError as err: print("OS error: {0}".format(err)) except ValueError: print("Не удалось преобразовать данные в целое число.") except: print("Непредвиденная ошибка:", sys. exc_info()[0]) raiseОбработчик, которому не нужно явно передавать исключение.
Есть моменты, когда предпочтителен явный обработчик исключений, либо для ясности кода, либо во избежание конфликтов с библиотеками, которые пытаются установить свои собственные
. В этих случаях может быть создана общая функция-обработчик, которой не нужно явно передавать объект исключения, вызывая exc_info()
для извлечения текущего исключения для потока.
import sys import threading import time def with_exception(): exc_type, exc_value = sys.exc_info()[:2] print(f'{exc_type.__name__} => {exc_value} in {threading.current_thread().name}') def cause_exception(delay): time.sleep(delay) raise RuntimeError('Error message') def thread_target(delay): try: cause_exception(delay) except RuntimeError: with_exception() threads = [ threading.Thread(target=thread_target, args=(0.3,)), threading.Thread(target=thread_target, args=(0.1,)), ] for t in threads: t.start() for t in threads: t.join() # RuntimeError => Error message in Thread-2 # RuntimeError => Error message in Thread-1
В этом примере избегается введение циклической ссылки между объектом трассировки и локальной переменной в текущем кадре, игнорируя эту часть возвращаемого значения из sys.exc_info()
. Если требуется трассировка, например чтобы ее можно было зарегистрировать явным образом удалите локальную переменную используя del, чтобы избежать циклов.
Ctrl+C
.Пример перехвата исключения KeyboardInterrupt
, которое возникает, когда пользователь нажимает клавишу прерывания программы, обычно это Ctrl+C или Delete.
Например, если запустить код, представленный ниже, то по нажатию Ctrl+C можно увидеть трассировку исключения KeyboardInterrupt
.
>>> import time >>> while True: ... time. CПрограмма завершена по нажатию CTRL+C
Теперь по нажатию Ctrl+C выводится «Программа завершена по нажатию CTRL+C»
Введение — Real Python
Смотреть сейчас Это руководство содержит соответствующий видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Создание и обработка исключений Python
Программа Python завершает работу, как только обнаруживает ошибку. В Python ошибка может быть синтаксической ошибкой или исключением. В этой статье вы увидите, что такое исключение и чем оно отличается от синтаксической ошибки. После этого вы узнаете о возбуждении исключений и создании утверждений. Затем вы закончите демонстрацией блока try и exclude. 9SyntaxError: неверный синтаксис
Стрелка указывает, где синтаксический анализатор столкнулся с синтаксической ошибкой
>>> печать (0 / 0) Traceback (последний последний вызов): Файл "", строка 1, в ZeroDivisionError: целочисленное деление или по модулю на ноль
На этот раз вы столкнулись с ошибкой исключения . Этот тип ошибки возникает всякий раз, когда синтаксически правильный код Python приводит к ошибке. В последней строке сообщения указано, с каким типом ошибки исключения вы столкнулись.
Вместо того, чтобы показывать сообщение ошибка исключения
, Python детализирует тип обнаруженной ошибки исключения. В данном случае это был ZeroDivisionError
. Python поставляется с различными встроенными исключениями, а также с возможностью создавать собственные исключения.
Вызов исключения
Мы можем использовать , поднять
, чтобы вызвать исключение, если возникнет условие. Оператор может быть дополнен пользовательским исключением.
Если вы хотите выдать ошибку при возникновении определенного условия, используя поднять
, вы можете сделать это следующим образом:
х = 10 если х > 5: поднять Exception('x не должен превышать 5. Значение x было: {}'.format(x))
Когда вы запустите этот код, вывод будет следующим:
Трассировка (последний последний вызов): Файл "", строка 4, вИсключение: x не должен превышать 5. Значение x было: 10
Программа останавливается и отображает наше исключение на экране, предлагая подсказки о том, что пошло не так.
AssertionError
Исключение Вместо того, чтобы ждать сбоя программы на полпути, вы также можете начать с утверждения в Python. Мы утверждаем
, что определенное условие выполнено. Если это условие окажется True
, то это отлично! Программа может продолжаться. Если условие оказывается False
, вы можете заставить программу выдать исключение AssertionError
.
Взгляните на следующий пример, где утверждается, что код будет выполняться в системе Linux:
система импорта assert («linux» в sys.platform), «Этот код работает только в Linux».
Если вы запустите этот код на компьютере с Linux, утверждение пройдет успешно. Если бы вы запустили этот код на компьютере с Windows, результат утверждения был бы False
, а результат был бы следующим:
Трассировка (последний последний вызов): Файл "", строка 2, вAssertionError: этот код работает только в Linux.
В этом примере выпадение 9Исключение 0026 AssertionError — это последнее, что сделает программа. Программа остановится и не будет продолжаться. Что, если это не то, чего вы хотите?
попробовать
и кроме
Блок: Обработка исключений Блоки try
и exclude
в Python используются для перехвата и обработки исключений. Python выполняет код, следующий за оператором try
, как «нормальную» часть программы. Код, который следует за , кроме 9Оператор 0027 — это ответ программы на любые исключения в предыдущем предложении
try
.
Как вы видели ранее, когда синтаксически правильный код сталкивается с ошибкой, Python выдает ошибку исключения. Эта ошибка исключения приведет к сбою программы, если она не обработана. Предложение , кроме
, определяет, как ваша программа реагирует на исключения.
Следующая функция может помочь вам понять , попробуйте
и , кроме блока
:
по умолчанию linux_interaction(): assert («linux» в sys.platform), «Функция может работать только в системах Linux». print('Что-то делаю.')
linux_interaction()
может работать только в системе Linux. assert
в этой функции вызовет исключение AssertionError
, если вы вызовете его в операционной системе, отличной от Linux.
Вы можете дать функции попробовать
, используя следующий код:
попробуйте: linux_interaction() кроме: проходить
Здесь вы обработали ошибку, выдав пропуск
. Если бы вы запустили этот код на компьютере с Windows, вы бы получили следующий вывод:
У тебя ничего нет. Хорошо, что программа не дала сбой. Но было бы неплохо увидеть, возникало ли какое-либо исключение всякий раз, когда вы запускали свой код. С этой целью вы можете изменить pass
на что-то, что будет генерировать информативное сообщение, например:
попробуйте: linux_interaction() кроме: print('Функция Linux не была выполнена')
Выполните этот код на компьютере с Windows:
Функция Linux не была выполнена
При возникновении исключения в программе, выполняющей эту функцию, программа продолжит работу, а также сообщит вам о том, что вызов функции не увенчался успехом.
Чего вы не увидели, так это типа ошибки, возникшей в результате вызова функции. Чтобы точно увидеть, что пошло не так, вам нужно поймать ошибку, которую выдала функция.
Следующий код является примером захвата AssertionError
и вывода этого сообщения на экран:
попробуйте: linux_interaction() кроме AssertionError как ошибки: распечатать (ошибка) print('Функция linux_interaction() не была выполнена')
Запуск этой функции на компьютере с Windows выводит следующее:
Функция может работать только в системах Linux. Функция linux_interaction() не была выполнена
Первое сообщение — AssertionError
, информирующее вас о том, что функция может выполняться только на компьютере с Linux. Второе сообщение сообщает вам, какая функция не была выполнена.
В предыдущем примере вы вызвали функцию, которую написали сами. Когда вы выполнили функцию, вы перехватили исключение AssertionError
и вывели его на экран.
Вот еще один пример, когда вы открываете файл и используете встроенное исключение:
попробуйте: с open('file.log') в качестве файла: read_data = файл.read() кроме: print('Не удалось открыть файл.log')
Если file.log не существует, этот блок кода выведет следующее:
Не удалось открыть файл.log
Это информационное сообщение, и наша программа продолжит работу. В документации по Python вы можете увидеть множество встроенных исключений, которые вы можете здесь использовать. На этой странице описано одно исключение:
.Исключение
FileNotFoundError
Возникает, когда запрошен файл или каталог, но он не существует. Соответствует errno ENOENT.
Чтобы перехватить этот тип исключения и вывести его на экран, вы можете использовать следующий код:
попробуйте: с open('file.log') в качестве файла: read_data = файл.read() кроме FileNotFoundError как fnf_error: печать (fnf_error)
В этом случае, если file.log не существует, вывод будет следующим:
[Errno 2] Нет такого файла или каталога: 'file.log'
Вы можете иметь более одного вызова функции в предложении try
и ожидать перехвата различных исключений. Здесь следует отметить, что код в try 9Предложение 0027 остановится, как только возникнет исключение.
Предупреждение: Перехват Исключение
скрывает все ошибки... даже совершенно неожиданные. Вот почему вам следует избегать голых предложений , кроме
, в ваших программах на Python. Вместо этого вам нужно обратиться к конкретным классам исключений, которые вы хотите поймать и обработать. Вы можете узнать больше о том, почему это хорошая идея, в этом уроке.
Посмотрите на следующий код. Здесь вы сначала звоните linux_interaction()
, а затем попытайтесь открыть файл:
попробуйте: linux_interaction() с open('file.log') в качестве файла: read_data = файл.read() кроме FileNotFoundError как fnf_error: печать (fnf_error) кроме AssertionError как ошибки: распечатать (ошибка) print('Функция Linux linux_interaction() не была выполнена')
Если файл не существует, запуск этого кода на компьютере с Windows выведет следующее:
Функция может работать только в системах Linux. Функция Linux linux_interaction() не была выполнена
Внутри предложения try
вы сразу столкнулись с исключением и не дошли до той части, где вы пытаетесь открыть file.log . Теперь посмотрите, что происходит, когда вы запускаете код на машине с Linux:
[Errno 2] Нет такого файла или каталога: 'file.log'
Вот основные выводы:
- Предложение
try
выполняется до тех пор, пока не встретится первое исключение. - В предложении
, кроме
, или в обработчике исключений вы определяете, как программа реагирует на исключение. 902:30 - Вы можете предвидеть несколько исключений и различать, как программа должна реагировать на них.
- Избегайте использования голых предложений
, кроме
.
Остальное
Пункт В Python с помощью оператора else
вы можете указать программе выполнять определенный блок кода только при отсутствии исключений.
Посмотрите на следующий пример:
попробуйте: linux_interaction() кроме AssertionError как ошибки: распечатать (ошибка) еще: print('Выполнение условия else.')
Если бы вы запустили этот код в системе Linux, вывод был бы следующим:
Что-то делать. Выполнение предложения else.
Поскольку программа не столкнулась с какими-либо исключениями, было выполнено предложение else
.
Вы также можете попробовать
запустить код внутри предложения else
и перехватить там возможные исключения:
попробуйте: linux_interaction() кроме AssertionError как ошибки: распечатать (ошибка) еще: пытаться: с open('file.log') в качестве файла: read_data = файл.read() кроме FileNotFoundError как fnf_error: печать (fnf_error)
Если бы вы выполнили этот код на компьютере с Linux, вы бы получили следующий результат:
Что-то делать. [Errno 2] Нет такого файла или каталога: 'file.log'
Из вывода видно, что функция linux_interaction()
запущена. Поскольку никаких исключений обнаружено не было, была предпринята попытка открыть файл file.log . Этот файл не существовал, и вместо того, чтобы открыть файл, вы поймали исключение FileNotFoundError
.
Уборка после использования
наконец
Представьте, что вам всегда приходилось выполнять какое-то действие для очистки после выполнения вашего кода. Python позволяет вам сделать это с помощью предложения finally
.
Взгляните на следующий пример:
попробуйте: linux_interaction() кроме AssertionError как ошибки: распечатать (ошибка) еще: пытаться: с open('file.log') в качестве файла: read_data = файл.read() кроме FileNotFoundError как fnf_error: печать (fnf_error) окончательно: print('Очистка вне зависимости от каких-либо исключений.')
В предыдущем коде все в предложении finally
будет выполнено. Неважно, встретите ли вы исключение где-нибудь в предложениях try
или else
. Выполнение предыдущего кода на компьютере с Windows приведет к следующему результату:
Функция может работать только в системах Linux. Уборка вне зависимости от каких-либо исключений.Удалить рекламу
Подведение итогов
Увидев разницу между синтаксическими ошибками и исключениями, вы узнали о различных способах создания, перехвата и обработки исключений в Python. В этой статье вы увидели следующие варианты:
-
поднять
позволяет вам создать исключение в любое время. -
assert
позволяет вам проверить, выполняется ли определенное условие, и выдать исключение, если это не так. - В предложении
try
все операторы выполняются до тех пор, пока не встретится исключение. -
, кроме
, используется для перехвата и обработки исключений, встречающихся в предложении try. -
else
позволяет вам кодировать разделы, которые должны запускаться только тогда, когда в предложении try не встречаются исключения. 902:30 -
наконец
позволяет выполнять разделы кода, которые должны выполняться всегда, с какими-либо ранее встречавшимися исключениями или без них.
Надеюсь, эта статья помогла вам понять основные инструменты, которые Python может предложить при работе с исключениями.
Смотреть сейчас Это руководство содержит связанный с ним видеокурс, созданный командой Real Python. Посмотрите его вместе с письменным учебным пособием, чтобы углубить свое понимание: Raising and Handling Python Exceptions
Обработка исключений Python — GeeksforGeeks
До сих пор мы изучали базовый Python от набора 1 до набора 4 (набор 1 | набор 2 | набор 3 | набор 4).
В этой статье мы обсудим, как обрабатывать исключения в Python, используя операторы try, exclude и finally с помощью соответствующих примеров.
Ошибка в Python может быть двух типов: синтаксические ошибки и исключения. Ошибки — это проблемы в программе, из-за которых программа останавливает выполнение. С другой стороны, исключения возникают, когда происходят некоторые внутренние события, которые изменяют нормальный ход программы.
Различные типы исключений в Python:
В Python есть несколько встроенных исключений, которые могут возникать при возникновении ошибки во время выполнения программы. Вот некоторые из наиболее распространенных типов исключений в Python:
- SyntaxError: Это исключение возникает, когда интерпретатор сталкивается с синтаксической ошибкой в коде, такой как неправильное написание ключевого слова, отсутствие двоеточия или несбалансированная скобка.
- TypeError : Это исключение возникает, когда операция или функция применяется к объекту неправильного типа, например, при добавлении строки к целому числу.
- NameError : Это исключение возникает, когда имя переменной или функции не найдено в текущей области.
- IndexError : Это исключение возникает, когда индекс выходит за пределы диапазона для списка, кортежа или других типов последовательностей.
- KeyError : Это исключение возникает, когда ключ не найден в словаре.
- ValueError : Это исключение возникает, когда функция или метод вызывается с недопустимым аргументом или вводом, например, при попытке преобразовать строку в целое число, когда строка не представляет допустимое целое число.
- AttributeError : Это исключение возникает, когда атрибут или метод не найден в объекте, например, при попытке доступа к несуществующему атрибуту экземпляра класса.
- IOError : Это исключение возникает, когда операция ввода-вывода, например чтение или запись файла, завершается сбоем из-за ошибки ввода-вывода.
- ZeroDivisionError : Это исключение возникает при попытке разделить число на ноль.
- Ошибка импорта : Это исключение возникает, когда оператору импорта не удается найти или загрузить модуль.
Это всего лишь несколько примеров множества типов исключений, которые могут возникать в Python. Важно правильно обрабатывать исключения в коде, используя блоки try-except или другие методы обработки ошибок, чтобы корректно обрабатывать ошибки и предотвращать сбои программы.
Разница между синтаксической ошибкой и исключениями
Синтаксическая ошибка: Как следует из названия, эта ошибка вызвана неправильным синтаксисом в коде. Это приводит к завершению программы.
Пример:
Python3
Сумма = 10000 IF IF 7777777777777777777777777777777777777777777777777777992992992929992929299009н. ) Печать ( «Вы имеете право приобрести Dsa Self Paced» ) |
Вывод:
Исключения: Исключения возникают, когда программа синтаксически корректна, но код приводит к ошибке . Эта ошибка не останавливает выполнение программы, однако изменяет ее нормальный ход.
Пример:
Python3
знаков = 10000 90 ( a) |
Вывод:
В приведенном выше примере возникла ошибка ZeroDivisionError, поскольку мы пытаемся разделить число на 0.
Примечание. Exception — это базовый класс для всех исключений в Python. Вы можете проверить иерархию исключений здесь.
Пример:
1) TypeError: это исключение возникает, когда операция или функция применяется к объекту неправильного типа. Вот пример:
Python
x = 5 у = "привет" з = x + y |
вывод: Traceback (последний последний вызов): Файл "7edfa469-9a3c-4e4d-98f3-5544e60bff4e.py", строка 4, вг = х + у TypeError: неподдерживаемые типы операндов для +: 'int' и 'str'
попробуйте блок catch для его разрешения:
Python
x = 900 26 5 у = "привет" попытка : z = x 9002 7 |
Ошибка: невозможно добавить int и a str
Оператор Try and Except — перехват исключений
Операторы try и exclude используются для перехвата и обработки исключений в Python. Операторы, которые могут вызывать исключения, хранятся внутри предложения try, а операторы, обрабатывающие исключение, записываются внутри предложения exclude.
Пример: Попробуем получить доступ к элементу массива, индекс которого выходит за границы, и обработаем соответствующее исключение.
Python3
a = [ 1 , 2 , 3 ] попытка : print ( "Второй элемент = %d" % ( a[ 1 ]))
печать ( "Четвертый элемент = %d" % (a[ 3 ]) )
кроме : печать ( "Ошибка произошло" ) |
Второй элемент = 2 Произошла ошибка
В приведенном выше примере операторы, которые могут вызвать ошибку, помещены в оператор try (второй оператор печати в нашем случае). Второй оператор печати пытается получить доступ к четвертому элементу списка, которого там нет, и это вызывает исключение. Затем это исключение перехватывается оператором exclude.
Перехват определенного исключения
Оператор try может иметь более одного предложения exclude для указания обработчиков различных исключений. Обратите внимание, что будет выполнен не более одного обработчика. Например, мы можем добавить IndexError в приведенный выше код. Общий синтаксис для добавления конкретных исключений:
try: # заявления) кроме IndexError: # заявления) кроме ValueError: # оператор(ы)
Пример: Перехват определенных исключений в Python
Python3
def fun(a): если a < 4 :
б = а / (а - 3 ) 9 0031 print ( "Значение b = " , b) try : веселье( 3 ) fun( 5 )
кроме ZeroDivisionError: print ( "Произошла и обработана ошибка ZeroDivisionError" ) кроме NameError: print ( "Name ) |
ZeroDivisionError Произошла и обработана
Если вы прокомментируете строку fun(3), вывод будет
NameError Occured and Handled
Приведенный выше вывод таков, потому что как только python пытается получить доступ к значению b, происходит NameError.
Попробуйте с предложением Else
В Python вы также можете использовать предложение else в блоке try-except, которое должно присутствовать после всех предложений исключения. Код входит в блок else только в том случае, если предложение try не вызывает исключения.
Пример: Try with else
Python3
def AbyB(a , b): 9 0031 попробовать : в = ((а + б) / (а - б)) кроме ZeroDivisionError: print ( "a/b результат 0" ) else : 9003 1 печать (в)
AbyB( 2. 0 , 3.0 ) AbyB( 3.0 , 3.0 ) |
Выход:
-5.0 a/b приводит к 0
Ключевое слово finally в Python
Python предоставляет ключевое слово finally, которое всегда выполняется после блоков try и exclude. Последний блок всегда выполняется после нормального завершения блока попытки или после завершения блока попытки из-за некоторого исключения.
Синтаксис:
попытка: # Какой-то код.... кроме: # необязательный блок # Обработка исключения (если требуется) еще: # выполнить, если нет исключения окончательно: # Некоторый код .....(всегда выполняется)
Пример:
Python3
try : к = 5 / / 0 печать (k)
кроме ZeroDivisionError: 900 26 печать ( "Невозможно разделить на ноль" )
наконец : печать ( 'Выполняется всегда' ) |
Вывод:
Нельзя делить на ноль Выполняется всегда.
Вызов исключения
Оператор повышения позволяет программисту принудительно вызвать определенное исключение. Единственный аргумент в raise указывает на возбуждаемое исключение. Это должен быть либо экземпляр исключения, либо класс исключения (класс, производный от Exception).
Python3
попытка : поднять NameError( "Привет" ) 9 0026 кроме NameError: print ( "Исключение" ) поднять |
Вывод приведенного выше кода будет просто напечатан как «Исключение», но в последнем также произойдет ошибка времени выполнения из-за оператора повышения в последнем линия. Таким образом, вывод в вашей командной строке будет выглядеть
Трассировка (последний последний вызов): Файл "/home/d6ec14ca595b97bff8d8034bbf212a9f. py", строка 5, вподнять NameError("Привет") # Поднять ошибку NameError: Привет
Преимущества обработки исключений:
- Повышенная надежность программы : Правильно обрабатывая исключения, вы можете предотвратить сбой программы или получение неправильных результатов из-за непредвиденных ошибок или ввода.
- Упрощенная обработка ошибок : Обработка исключений позволяет отделить код обработки ошибок от основной логики программы, упрощая чтение и сопровождение кода.
- Более чистый код: Благодаря обработке исключений вы можете избежать использования сложных условных операторов для проверки ошибок, что приводит к более чистому и читабельному коду.
- Упрощенная отладка : при возникновении исключения интерпретатор Python печатает трассировку, которая показывает точное место возникновения исключения, упрощая отладку кода.
Недостатки обработки исключений:
- Затраты на производительность: Обработка исключений может быть медленнее, чем использование условных операторов для проверки ошибок, поскольку интерпретатору приходится выполнять дополнительную работу для перехвата и обработки исключения.