Sobes.tech
Junior

Какви са особеностите на обработката на изключения в Python?

sobes.tech AI

Отговор от AI

Изключенията в Python са събития, които нарушават стандартния ход на изпълнение на програмата. Те представляват обекти, които обозначават грешки.

Характеристики:

  • Иерархия на изключенията: Всички вградени изключения са класове и са организирани в йерархия, базирана на наследяване от основния клас BaseException.
    # Пример за йерархия
    # BaseException -> Exception -> StandardError -> ...
    #                  Exception -> ArithmeticError -> ZeroDivisionError
    
  • Блокове try...except...: Основният механизъм за обработка на изключения.
    try:
        # Код, който може да предизвика изключение
        result = 10 / 0
    except ZeroDivisionError:
        # Обработка на конкретно изключение
        print("Деление на нула!")
    except Exception as e:
        # Обработка на други изключения
        print(f"Възникна грешка: {e}")
    
  • Множество except блокове: Позволяват обработка на различни типове изключения по различен начин.
    try:
        # Код
        value = int("abc")
    except ValueError:
        print("Невалиден формат на число.")
    except TypeError:
        print("Невалиден тип данни.")
    
  • Блок else: Изпълнява се, ако блокът try приключи без изключения.
    try:
        # Код
        result = 10 / 2
    except ZeroDivisionError:
        print("Деление на нула!")
    else:
        print("Операцията е успешна.")
    
  • Блок finally: Винаги се изпълнява, независимо дали е възникнало изключение или не. Използва се за освобождаване на ресурси.
    file = None
    try:
        file = open("myfile.txt", "r")
        # Четене от файл
    except FileNotFoundError:
        print("Файлът не е намерен.")
    finally:
        if file:
            file.close() # Гарантирано затваряне на файла
    
  • Оператор raise: Използва се за явно предизвикване на изключение.
    def divide(a, b):
        if b == 0:
            raise ZeroDivisionError("Невъзможно деление с нула")
        return a / b
    
    try:
        divide(10, 0)
    except ZeroDivisionError as e:
        print(f"Грешка: {e}")
    
  • Потребителски изключения: Могат да се създават собствени класове за изключения, наследявайки ги от Exception или друг съществуващ клас.
    class CustomError(Exception):
        pass
    
    def process_data(data):
        if not data:
            raise CustomError("Данните са празни")
    
    try:
        process_data([])
    except CustomError as e:
        print(f"Грешка: {e}")
    
  • Обработка на изключения с използване на контекстния мениджър with: Улеснява работата с ресурси, които изискват явно затваряне (например файлове).
    try:
        with open("myfile.txt", "r") as file:
            # Работа с файла
            content = file.read()
    except FileNotFoundError:
        print("Файлът не е намерен.")
    # Файлът автоматично се затваря при изход от блока `with`
    
  • Свързване на изключения: При обработка на изключение може да се запази информация за предходното обработено изключение (имплицитно или с използване на raise Exception from another_exception).

Тези характеристики осигуряват гъвкав и мощен механизъм за обработка на грешки в Python, позволявайки създаването на по-надеждни и устойчиви на срив програми.