Исключения в python являются ошибками, генерируемыми синтаксически правильными утверждениями.
Они прекращают выполнение сценария. Некоторыми примерами исключений являются NameError, TypeError, AssertionError, ConnectionAbortedError и т. д.
Исключения могут быть обработаны, чтобы предотвратить непредсказуемое завершение сценария.
Эта статья охватывает следующие примеры:
Посмотрите на следующий код:
t a = 12 s = "привет" print(a+s)
Вывод:
Traceback (most recent call last): File "<stdin>", line 3, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'str'
Здесь синтаксис функции печати правильный, но добавление целого числа и строки неверно. Следовательно, TypeError вызывается интерпретатором Python.
Ключевые слова, вовлеченные в обработку исключений, являются try, except и finally.
Блок try должен сопровождаться блоком исключения. Добавление блока finally не является обязательным.
Операторы в блоке try выполняются построчно. Если выполнение какого-либо оператора выдает исключение. Остальные операторы в этом блоке пропускаются, и начинается выполнение кроме блока.
Пример:
a = 12 s = "привет" try: print("внутри try") print(a + s) # поднимет исключение TypeError print("Печать с использованием исходных типов данных") except TypeError: # будет обрабатывать только TypeError print("внутри, за исключением") print(str(a) + s) print("Печать с использованием type-casted типов данных")
Вывод:
внутри try внутри, за исключением 12привет Печать с использованием type-casted типов данных
Здесь TypeError был вызван при выполнении строки 2 внутри блока try. Следовательно, выполнение остальных операторов было пропущено и, кроме выполнения блока, началось. Обратите внимание, что исключения, которые нужно обработать, упоминаются ключевое слово except.
Многочисленные исключения могут быть обработаны с помощью одного блока try-кроме. Это делается путем упоминания имен исключений, разделенных запятыми внутри скобок, сразу после ключевого слова кроме.
try: if (3 + 4 - 5) > 0: a = 3 a.append("привет") # Выбрасывает AttributeError else: print("привет" + 4) # Выбрасывает TypeError except (AttributeError, TypeError) as e: print("Произошла ошибка:", e)
Вывод:
Произошла ошибка: 'int' object has no attribute 'append'
Блок finally, который находится после блока except. Этот блок операторов выполняется независимо от того, было ли обнаружено исключение или нет.
Добавление блока finally к предыдущему примеру:
try: if (3 + 4 - 5) > 0: a = 3 a.append("привет") # выбрасывает атрибут ошибки else: print("привет" + 4) # выбрасывает TypeError except (AttributeError, TypeError) as e: print("Произошла ошибка:", e) finally: print("Блок try except успешно выполнен")
Вывод:
Произошла ошибка: 'int' object has no attribute 'append' Блок try except успешно выполнен
Здесь операторы в try вызывают исключение, за исключением того, что был выполнен блок и затем блок finally.
Посмотрим на другой пример:
try: if (3 + 4 - 5) < 0: a = 3 print(a + 5) # простое добавление else: print("привет" + "4") # конкатенация строк except (AttributeError, TypeError) as e: print("Произошла ошибка:", e) finally: print("Блок try except успешно выполнен")
Вывод:
8 Блок try except успешно выполнен
Здесь мы видим, что блок finally был выполнен, даже если блок исключений никогда не выполнялся.
Если операторы внутри блока except и finally выдают исключение, выполнение оставшегося сценария будет прекращено.
Блок try-except может быть окружен другим блоком try-except.
import json import sys try: with open("привет.json") as fp: try: json_dict = json.load(fp) except json.JSONDecodeError: print("Файл Json не существует") print(json_dict) except: print("Произошла ошибка при разборе json:", sys.exc_info()[1])
Вывод: если привет.json существует
{'name': 'AndreyEx', 'surname': 'Andrey'}
Вывод: если привет.json не существует
Произошла ошибка при разборе json: [Errno 2] No such file or directory: 'привет.json'
Вывод: если привет.json не является допустимым файлом json
Файл Json не существует произошла ошибка при разборе json: name 'json_dict' is not defined
Эта форма решения может обрабатывать исключение, возникающее внутри блока except или finally.
Как поставить KDE в CentOS 8 ?
smol bissines server 2003
.
Можно ли заменить на CentOS 8 ?