Обработка ошибок в Python

Обработка ошибок в Python

В этой статье мы объясним обработку ошибок в Python.

YouTube Video

Обработка ошибок в Python

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

Блок try

В блоке try вы пишете код, который хотите выполнить. Если в этом блоке происходит ошибка, выполнение программы немедленно переходит в блок except.

 1try:
 2    # Code that may raise an error (division by zero, for example)
 3    #number = int(input("Enter a number: "))
 4    number = int("abc")
 5    result = 10 / number
 6    print("Result:", result)
 7except ValueError as e:
 8    # Handle invalid input (e.g. non-numeric input)
 9    print("Invalid input. Please enter a whole number.")
10    print(f"Value error: {e}")
11except ZeroDivisionError as e:
12    # Handle division by zero error
13    print("Cannot divide by zero!")
14    print(f"Zero division error: {e}")
  • Этот код является примером обнаружения ошибок в блоке try и соответствующей их обработки путем перехвата либо ValueError, либо ZeroDivisionError.

Блок except

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

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 0
 4    result = 10 / number
 5    print("Result:", result)
 6except ZeroDivisionError as e:
 7    print("Cannot divide by zero!")
 8    print(f"Zero division error: {e}")
 9except ValueError as e:
10    print("Input was not a valid integer.")
11    print(f"Value error: {e}")
  • Этот код является примером выполнения различной обработки для каждого типа исключения в блоке except, когда в блоке try происходит ошибка.

Обработка нескольких исключений вместе

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

1try:
2    my_list = [1, 2]
3    result = my_list[3] + 10 / 0
4except (IndexError, ZeroDivisionError) as e:
5    print(f"Exception occurred: {e}")
  • Этот код является примером одновременного перехвата как IndexError, так и ZeroDivisionError и обработки этих исключений одинаковым образом.

Безусловная обработка исключений

Пропустите аргумент для except, если хотите обрабатывать все типы исключений в одном блоке.

1try:
2    # This code might cause some exception
3    result = "10" + 5  # TypeError
4except Exception as e:
5    print("Unexpected error")
  • Тем не менее, обработка конкретных исключений, а не безусловный перехват всех исключений, гораздо полезнее для поиска ошибок и отладки. По возможности, явная обработка только ожидаемых исключений, таких как ValueError или TypeError, повысит устойчивость вашего кода.

Блок else

Блок else выполняется только в том случае, если в блоке try не произошло ошибок.

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = 5
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
  • Этот код является примером, когда блок else выполняется только если в блоке try не возникло ошибки.

Блок finally

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

 1try:
 2    #number = int(input("Enter a number: "))
 3    number = int("abc")
 4    result = 10 / number
 5except ZeroDivisionError as e:
 6    print("Cannot divide by zero!")
 7    print(f"Zero division error: {e}")
 8except ValueError as e:
 9    print("Input was not a valid integer.")
10    print(f"Value error: {e}")
11else:
12    # This block will execute only if no exceptions were raised
13    print("Result:", result)
14finally:
15    # This block will always execute, regardless of whether an exception was raised
16    print("Execution completed.")
  • Этот код демонстрирует, что блок finally выполняется вне зависимости от того, возникло исключение или нет.

Ключевое слово raise

Можно также вызвать исключение, используя ключевое слово raise, если определённые условия в существующем коде не выполняются.

1def divide(a, b):
2    if b == 0:
3        raise ValueError("Cannot divide by zero.")
4    return a / b
5
6try:
7    result = divide(10, 0)
8except ValueError as e:
9    print(f"Error: {e}")
  • Этот код является примером явного возбуждения исключения с помощью ключевого слова raise, если условие не выполнено.

Заключение

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

Вы можете следовать этой статье, используя Visual Studio Code на нашем YouTube-канале. Пожалуйста, также посмотрите наш YouTube-канал.

YouTube Video