Как использовать в 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 ex
exceptIOErroras e:
print("Caught the I/O error.")
raiseex

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

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

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

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/ x
except:
print("Error case")
exit(0)
else:
print("Pass case")
exit(1)

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

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

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

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

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

Вывод:

Error occurred
The[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:
assertFalse
exceptAssertionError:
pass
print('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.

Просмотров:

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