Обработка ошибок в 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-канал.