Как использовать в Python Try-Except

Применение try-except — наиболее распространенный метод обработки ошибок. В данной статье мы познакомимся с лучшими практиками использования try-except в Python.

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

Для чего используются условия Try-Except / Try-Except-else?

При помощи try-except и try-except-else можно легко избежать многих проблем, которые могут возникнуть. К примеру, программный код Python, использующий стиль LBYL(Look before you leap), может привести к зацикливанию условий. В подобном случае поможет try-except.

Также бывают случаи, когда правильность выполнения кода зависит от актуальности данных. К примеру, код, вызывающий os.path.exists или Queue.full, может завершиться неудачно. Данные возможности могут возвращать данные, которые устаревают к моменту их использования. Так что лучше использовать try-except-else.

Выведение исключений

В Python можно отображать исключение каждый раз, когда это надо. Это можно легко сделать, вызвав из кода [raise Exception(‘Test error!’)]. После чего исключение остановит текущее выполнение и перейдет дальше по стеку вызовов до тех пор, пока исключение не будет обработано.

Для чего используются исключения?

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

Обработка исключений — это искусство, которое помогает в написании надежного и качественного кода.

Python: советы по использованию Try-Except, Try-Except-Else и многое иное

Как использовать в Python Try-Except

Как в Python лучше всего использовать Try-Except

1. Как обрабатывать произвольное исключение

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

try:#вашкодexceptExceptionas ex:print(ex)

2. Перехват нескольких исключений в одном блоке except

Можно перехватить пару исключений в одном блоке except.

except(Exception1,Exception2)as e:pass

Обратите внимание, что в Python 2.6 / 2.7 необходимо отделить исключения от переменной запятой. Но этого нельзя делать в Python 3. Вместо этого надо использовать ключевое слово [as].

3. Обработка нескольких исключений в одном блоке except

Существует несколько методов обработки сразу же нескольких исключений. Первый из них требует размещения всех исключений, которые могут возникнуть. Смотрите приведенный ниже код:

try:file= open('input-file','open mode')except(IOError,EOFError)as e:print("Testing multiple exceptions. {}".format(e.args[-1]))

Следующий способ — обрабатывать каждое исключение в отдельном блоке except:

try:file= open('input-file','open mode')exceptEOFErroras ex:print("Caught the EOF error.")raise exexceptIOErroras e:print("Caught the I/O error.")raiseex

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

try:file= open('input-file','open mode')except:# In case of any unhandled error, throw it awayraise

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

4. Повторное выведение исключений в Python

Однажды выведенные исключения продолжают обрабатываться в вызывающих их способах до тех пор, пока они не будут обработаны. Но можно без труда добавить условие except, которое включает только вызов [raise] без каких-либо аргументов. Это приведет к повторному исключению.

Смотрите приведенный ниже программный код.

try:# Намеренноевыведениеисключения.raiseException('I learn Python!')except:print("Entered in except.")# Повторноевыведениеисключения.raise

Отображение:

Enteredinexcept.Traceback(most recent call last):File"python", line 3,in<module>Exception: I learn Python!

5. Когда использовать условие else

Используйте условие else после блока try-except. Оно будет выполняться в том случае, если исключение не будет выдано. Оператор else должен предшествовать блокам except.

В блоках else можно легко добавить программный код, который надо запустить, если ошибок не возникло.

В приведенном ниже примере видно, что цикл while работает бесконечно. Код запрашивает значение у посетителя, а далее анализирует его при помощи встроенной возможности [int()]. Если посетитель вводит нулевое значение, блок except будет заблокирован. В противном случае код будет проходить через блок else.

whileTrue:# Введете с консоли целое число. x =int(input())# Разделите 1 на x, чтобы протестировать ошибкуtry:result=1/ xexcept:print("Error case")exit(0)else:print("Pass case")exit(1)

6. Использование блока [finally]

Если есть программный код, который должен выполняться во всех случаях, разместите его внутри блока [finally]. Python будет запускать данные инструкции. Это самый распространенный метод выполнения задач очистки. Вы также можете без труда проверить это.

Ошибка перехватывается условием try. После того, как будет выполнен программный код в блоке except, выполняется инструкции в [finally].

Смотрите приведенный ниже код.

try:# Намеренно выводим ошибку. x =1/0except:# УсловиеExcept:print("Error occurred")finally:# УсловиеFinally:print("The [finally clause] is hit")

Отображение:

Error occurredThe[finally clause]is hit

7. Используйте ключевое слово as для перехвата конкретных типов исключений

При помощи <identifier> можно без труда создать объект исключения. В приведенном ниже примере мы создаем объект IOError, а далее используем его внутри условия.

try:# Намеренно выводим ошибку. f = open("no-file")exceptIOErroras err:# Создаемэкземпляр IOError дляучета.print("Error:", err)print("Code:",err.errno)

Отображение:

('Error:',IOError(2,'No such file or directory'))('Code:',2)

8. Лучшие практики вывода исключений

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

Не рекомендуется:

defbad_exception():try:raiseValueError('Intentional - do not want this to get caught')raiseException('Exception to be handled')exceptExceptionas error:print('Inside the except block: '+repr(error))bad_exception()

Отображение:

Inside the except block:ValueError('Intentional - do not want this to get caught',)

Рекомендуется:

В приведенном ниже примере перехватывается конкретный тип исключения, а не общий. Мы также используем настройка args для вывода некорректных аргументов, если они есть. Рассмотрим этот пример.

try:raiseValueError('Testing exceptions: The input is in incorrect order','one','two','four')exceptValueErroras err:print(err.args)

Отображение:

('Testing exceptions: The input is in incorrect order','one','two','four')

9. Как пропустить ошибки и продолжить выполнение кода

Лучше не применять данную практику. Но если это необходимо, то используйте следующий пример.

try:assertFalseexceptAssertionError:passprint('Welcome to Prometheus!!!')

Отображение:

Welcome to Prometheus!!!

Рассмотрим наиболее распространенные исключения в Python с примерами.

Распространенные ошибки исключений:

  • IOError –возникает, если файл не открывается.
  • ImportError — если модуль python не может быть загружен или размещен.
  • ValueError — возникает, если функцию получает аргумент корректного типа, но с некорректным значением.
  • KeyboardInterrupt — когда посетитель прерывает выполнение кода нажатием на Delили Ctrl-C.
  • EOFError — когда возможности input() / raw_input()достигают конца файла(EOF), но без чтения каких-либо данных.

Примеры распространенных исключений

exceptIOError:print('Error occurred while opening the file.')exceptValueError:print('Non-numeric input detected.')exceptImportError:print('Unable to locate the module.')exceptEOFError:print('Identified EOF error.')exceptKeyboardInterrupt:print('Wrong keyboard input.')except:print('An error occurred.')

Как использовать Try-Except в Python

В процессе программирования ошибки неизбежны. Но их можно без проблем обработать, используя конструкции try-except или try-except-else, try-except-finally.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *