Работа с синтаксическими ошибками и исключениями в Python

PythonBeginner
Практиковаться сейчас

Введение

Добро пожаловать в лабораторию по синтаксису и исключениям в Python! В этой лаборатории вы научитесь определять и исправлять синтаксические ошибки в своем коде на Python, а также как обрабатывать исключения, которые могут возникнуть во время выполнения вашего кода.

Достижения

  • Синтаксические ошибки
  • Исключения

Понимание синтаксических ошибок

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

Откройте новый интерпретатор Python.

python3

Вот пример синтаксической ошибки, вызванной отсутствием двоеточия в конце цикла for:

for i in range(10)
  print(i)

Интерпретатор вызовет синтаксическую ошибку и покажет, где произошла ошибка:

File "<stdin>", line 1
    for i in range(10)
                      ^
SyntaxError: invalid syntax

Символ-стрелка (^) показывает местонахождение синтаксической ошибки, а сообщение об ошибке говорит нам, что синтаксис неверен.

Чтобы исправить эту синтаксическую ошибку, нам просто нужно добавить двоеточие в конце цикла for:

for i in range(10):
  print(i)

Теперь попробуем пример с неправильной отступацией:

if True:
print("Hello, World!")

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

if True:
  print("Hello, World!")

Обработка исключений

Исключение - это ошибка, возникающая во время выполнения программы. В Python мы можем обрабатывать исключения с использованием инструкций try и except.

Вот пример того, как обработать исключение ZeroDivisionError:

try:
  x = 10 / 0
except ZeroDivisionError:
  print("Cannot divide by zero!")

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

Мы также можем обрабатывать несколько исключений в одном блоке try с использованием инструкции except для нескольких исключений:

try:
  x = 10 / 0
  y = int('abc')
except ZeroDivisionError:
  print("Cannot divide by zero!")
except ValueError:
  print("Invalid input!")

В этом примере блок try содержит код, который может вызвать исключение ZeroDivisionError или ValueError. Если возникает исключение ZeroDivisionError, блок except с ZeroDivisionError обработает его. Если возникает исключение ValueError, блок except с ValueError обработает его.

Генерация исключений

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

Вот пример того, как сгенерировать исключение ValueError:

def validate_age(age):
  if age < 0:
    raise ValueError("Age cannot be negative.")

try:
  validate_age(-1)
except ValueError as e:
  print(e)

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

Перехват всех исключений

Иногда мы можем захотеть поймать все исключения, которые могут быть вызваны в блоке try. Мы можем сделать это с использованием инструкции except без указания исключения:

try:
  x = 10 / 0
  y = int('abc')
except:
  print("An error occurred!")

В этом примере блок try содержит код, который может вызвать исключение ZeroDivisionError или ValueError. Если какое-либо исключение возникает, оно будет поймано блоком except, который выводит сообщение об ошибке.

Кlause else

Мы можем использовать ключевое слово else в инструкции try для указания блока кода, который должен выполняться только в том случае, если в блоке try не возникает никаких исключений:

try:
  x = int(input("Enter a number: "))
except ValueError:
  print("Invalid input!")
else:
  print("The number is", x)

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

Кlause finally

Мы можем использовать ключевое слово finally в инструкции try для указания блока кода, который должен выполняться всегда, независимо от того, возникло исключение или нет:

try:
  x = int(input("Enter a number: "))
except ValueError:
  print("Invalid input!")
finally:
  print("Exiting program.")

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

Резюме

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

Надеюсь, что это практическое занятие было полезным и что вы чувствуете себя более уверенно при работе с синтаксическими ошибками и исключениями в Python!