English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
В этой статье вы узнаете, как использовать операторы try, except и finally для обработки исключений в программах Python. Это вдохновит вас писать чистый, читаемый и эффективный код на Python.
Python имеет многоВнутренние исключения Когда в них出现某些 ошибки, они принудительно заставляют ваш program выдавать ошибки.
Когда происходят эти исключения, они приводят к остановке текущего процесса и передают его вызовному процессу, пока его не обработают. Если не обрабатывать, наш的程序 будет аварийно завершен.
Например, если функция A вызывает функцию B, а функция B, в свою очередь, вызывает функцию C, и в функции C происходит исключение. Если это исключение не обработать в C, то оно будет передано B, а затем A.
Если не обрабатывать его, то будет выброшено сообщение об ошибке, и наш程序 внезапно остановится.
В Python можно использовать оператор try для обработки исключений.
Ключевые операции, которые могут вызвать исключение, помещаются в блок try, а код обработки исключений пишется в блок except.
После捕获 исключения, что мы будем делать, зависит от нас самих. Это простая пример.
# Импорт модуля sys для получения типа исключения import sys randomList = ['a', 0, 2] for entry in randomList: try: print("Входные данные равны", entry) r = 1/int(entry) break except: print("Oops!", sys.exc_info()[0], "возник.") print("Следующее входное данные.") print() print("Обратное значение", entry, "равно", r)
Результат вывода
Входные данные равны 'a' Oops! <class 'ValueError'> возник. Следующее входное данные. Входные данные равны 0 Oops! <class 'ZeroDivisionError'> возник. Следующее входное данные. Входной данные равны 2 Обратное значение 2 равно 0.5
В этом программном обеспечении мы выполняем цикл, пока пользователь не введет целое число с действительным обратным значением. Часть, которая может вызвать исключение, находится в блоке try.
Если не произошло ни одного исключения, то контент за исключением блока пропускается, и продолжается нормальный процесс. Но если произошло любое исключение, оно будет захвачено except-блоком.
Здесь мы используем функцию exinfo() из модуля sys для печати имени исключения и предлагаем пользователю попробовать еще раз. Мы можем видеть, что значения 'a' и '1.3' вызывают ValueError, а '0' вызывает ZeroDivisionError.
В примере, приведенном выше, мы не упоминаем ни одного исключения в except-подпрограмме.
Это не guter программистский навык, так как он будет захватывать все исключения и обрабатывать每种 случай в одном и том же стиле. Мы можем определить, какие исключения будут захватывать except-подпрограммы.
Одна try-подпрограмма может иметь любое количество except-подпрограмм для обработки их по-разному, но при возникновении исключения выполняется только одна except-подпрограмма.
Мы можем использовать тупл с значениями для указания нескольких исключений вexcept-подпрограмме. Вот пример伪-кода.
try: # Выполнение某些 кодов пропустить except ValueError: # Обработка исключения ValueError пропустить except (TypeError, ZeroDivisionError): # Обработка нескольких исключений # TypeError и ZeroDivisionError исключения пропустить except: # Обработка всех других исключений пропустить
В программировании на Python исключения выбрасываются при возникновении соответствующих ошибок в время выполнения, но мы можем использовать ключевое слово raise, чтобы принудительно выбросить исключение.
Мы также можем выбрать передачу значения в исключение, чтобы прояснить, почему вызывается исключение.
>>> raise KeyboardInterrupt Traceback (последний вызов в начале): ... KeyboardInterrupt >>> raise MemoryError("Это argument") Traceback (последний вызов в начале): ... MemoryError: Это argument >>> try: ... a = int(input("Введите положительное целое число: ")) ... if a <= 0: ... raise ValueError("Это не положительное число!") ... except ValueError as ve: ... print(ve) ... Введите положительное целое число: -2 Это не положительное число!
В Python try-инструкция может иметь опциональный finally-подраздел. Этот раздел всегда выполняется в любом случае и обычно используется для освобождения внешних ресурсов.
Например, мы можем подключиться к удаленному数据中心 через сеть, или использовать файлы или графический интерфейс пользователя (GUI).
В всех этих случаях, независимо от успеха или неудачи ресурса, мы должны удалить этот ресурс. Эти действия (закрытие файла, GUI или разрыв подключения к сети) выполняются в finally-подразделе, чтобы обеспечить их выполнение.
ЭтоОперации с файламиПример для ilustration этого.
try: f = open("test.txt", encoding = 'utf-8') # Выполнение операций с файлами finally: f.close()
Этот тип constructions обеспечивает закрытие файла, даже если происходит исключение.