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

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

Синтаксис блоков Try-Except

try:
    # Code that may raise an exception
    # ...
except ExceptionType1:
    # Code to handle ExceptionType1
    # ...
except ExceptionType2:
    # Code to handle ExceptionType2
    # ...
else:
    # Code to execute if no exception occurs
    # ...
finally:
    # Code that always executes, regardless of whether an exception occurred or not
    # ...

Внутри блока try мы пытаемся сделать что-то, что может вызвать неизвестную ошибку, но вы знаете возможные ошибки, которые могут произойти, которые затем обрабатываются блоками кроме для соответствующих ошибок. Если исключений не возникает, то блок else выполняется после блока try. Блок finally вообще не имеет никакого значения. Оно будет исполнено в любом случае. Использовать его или нет, это ничего не значит.

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

Основные ошибки в Python

Это встроенные ошибки Python, которые могут быть полезны при обработке исключений:

1. Синтаксическая ошибка

Если в синтаксисе кода есть ошибка, интерпретатор выдает эту ошибку. Это может быть вызвано отсутствием запятых, круглых скобок, кавычек и т. д.

print("Hello,world) # SyntaxError: Missing closing quotation mark

2. Ошибка имени

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

def hello():
  x=10
print(x) # x is not defined

3. Введите ошибку

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

x=10
y='Hello'
print(x+y) # TypeError: can only concatenate str (not "int") to str

4. Ошибка индекса

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

my_list = [1, 2, 3]
print(my_list[3])  # IndexError: list index out of range

5. Ключевая ошибка

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

my_dict = {"name": "Alice", "age": 25}
print(my_dict["gender"])  # KeyError: 'gender'

6. Ошибка значения

Если вы попытаетесь передать в функцию действительный тип данных, но неверный аргумент данных, вы получите эту ошибку. Вы получите эту ошибку при попытке преобразовать строку алфавитов в целое число с помощью функции int().

x = int("abc")  # ValueError: invalid literal for int() with base 10: 'abc'

При возникновении ошибки рекомендуется внимательно прочитать сообщение об ошибке, поскольку оно является ключом к устранению ошибки.

Использование ошибок и обработка ошибок

try:
    num1 = int(input("First number: "))
    num2 = int(input("Second number: "))
except ValueError:
    print("Invalid input. Please enter valid integers.")

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

num1 = int(input("First number:"))
num2 = int(input("Second number:"))
try:
    x = num1 / num2 # This will raise a ZeroDivisionError if num2=0
except ZeroDivisionError:
    print("Error: Division by zero!")
except Exception as e:
    print("An error occurred:", str(e))
else:
    print("No exception occurred.")
    print(x)
finally:
    print("This will always execute.")

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

Во-вторых, если второе число равно нулю, это вызывает ZeroDivisionErrorhandledusing, за исключениемblock. Если выдается какая-либо другая ошибка, она обрабатывается вторым блоком кроме, выдавая ошибку как сообщение об ошибке. Если исключений не возникает, то выполняется блок else и, наконец, несмотря ни на что, выполняется блок finally.

Выяснение собственной ошибки

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

def divide_numbers(num1, num2):
    if num2 == 0:
        raise ValueError("Cannot divide by zero")
    return num1 / num2

try:
    result = divide_numbers(10, 0)
except ValueError as e:
    print("An error occurred:", str(e))
else:
    print(result)

Здесь определена функция divide_numbers(), которая принимает два числовых аргумента. Он проверяет, является ли второе число нулем, и если да, то выдает ошибку с собственным сообщением об ошибке, например: «Невозможно разделить на ноль».

Когдамы вызываем эту функцию внутри блока try, она вызывает ошибку ValueError. Когда мы обрабатываем эту ошибку с помощью блока кроме, отображается наше специальное сообщение, которое можно распечатать в консоли.

Создание собственных классов ошибок

class CustomError(Exception):
    def __init__(self, message):
        self.message = message

    def __str__(self):
        return self.message

def check_value(value):
    if value < 0:
        raise CustomError("Value cannot be negative")

try:
    check_value(-5)
except CustomError as e:
    print("An error occurred:", str(e))

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

Выявление собственных ошибок поможет вам легко найти ошибки в коде и понять, где в коде что-то пошло не так. Это упрощает процесс отладки.