Ошибки и исключения
Существуют два типа ошибок: синтаксические и семантические.
Синтаксические ошибки во время трансляции диагностируются и, указывая место ошибки, пишется пояснительный текст по смыслу ошибки.
Семантические ошибки определяются в процессе интерпретации программы. Они обнаруживаются, когда нет возможности реализовать данную программную конструкцию или когда на тестовых данных или при эксплуатации программы выдаются неправильные результаты. Первый тип ошибок и при тестировании находятся и исправляются в процессе отладки программы.
При решении некоторых задач возможна некорректная подача данных или недопустимая ситуация. В этом случае предусматривается ситуация «исключения». Для обработы ситуации исключения многие языки программирования предусматривают свои инструментальные средства.
Так, для вычисления обратного значения Х можно написать следующий фрагмент программы
X=int(input())
print(1/X)
При вводе значения 2 программа выдаст следующие значения
При вводе 0 программа выдаст следующий фрагмент
Для работы с исключительными ситуациями используется конструкция
try :
# фрагмент программы
…
except : # except имя ошибки : - здесь определяется тип ошибки и реакция
# фрагмент программы, работающий в случае прерывания
…
else : #
# фрагмент программы, работающий в случае отсутствия прерываний
…
finally :
# фрагмент программы, работающий в любом
…
Пример решения задачи с обработкой прерывания
try :
X=int(input())
print(1/X)
except :
print(“Error dividing by zero”)
На экране появится следующее изображение
Инструкция raise позволяет программисту принудительно сгенерировать исключение, которое может использоваться при отладке программы.
Классы
Python ограничен в множественном наследовании в классах. Внутренние переменные и внутренние методы классов начинаются с двух знаков нижнего подчеркивания «__» (например «__myprivatevar»). Можно присвоить значение переменной класса извне. Пример:
class Myclass:
common = 10
def __init__(self):
self. myvariable = 3
def myfunction (self, arg1, arg2):
return self. myvariable
# Здесь объявили класс Myclass.
# Функция __init__ вызывается автоматически при инициализации классов.
classinstance = Myclass ()
# Инициализирован класс и переменная myvariable принимает значение 3 как заявлено в методе инициализации
classinstance.myfunction(1, 2)
#Метод myfunction класса Myclass возвращает значение переменной myvariable
3
# Переменная common объявлена во всех классах
classinstance2 = Myclass ()
classinstance.common # 10
classinstance2.common # 10
# Поэтому, если изменить ее значение в классе Myclass изменятся
# и ее значения в объектах, инициализированных классом Myclass
Myclass.common = 30
classinstance.common # 30
classinstance2.common # 30
# А здесь не изменяется переменная класса. Вместо этого объявляется
# в объекте и присваивается ей новое значение
classinstance.common = 10
classinstance.common # 10
classinstance2.common # 30
Myclass.common = 50
# Теперь изменение переменной класса не коснется переменных объектов
# этого класса
classinstance.common # 10
classinstance2.common # 50
# Следующий класс является наследником класса Myclass, наследуя его
# свойства и методы, к тому же класс может наследоваться из нескольких
# классов, в этом случае запись такая: class Otherclass(Myclass1, Myclass2,
# MyclassN)
class Otherclass (Myclass):
def __init__(self, arg1):
self.myvariable = 3
print arg1
classinstance = Otherclass("hello")
hello
classinstance.myfunction(1, 2) # 3
# Этот класс не имеет совйтсва test, но мы можем
# объявить такую переменную для объекта. Причем
# эта переменная будет членом только classinstance.
classinstance.test = 10 # classinstance.test – 10
Исключения в Python имеют структуру try-except [exceptionname]:
def somefunction():
try:
10 / 0 # Деление на ноль вызывает ошибку
Except ZeroDivisionError:
# Но программа не "Выполняет недопустимую операцию"
# А обрабатывает блок соответствующий ошибке «ZeroDivisionError»
Print "Oops, invalid."
fnexcept ()
Oops, invalid.
Дата добавления: 2022-04-12; просмотров: 127;