Исключения

Долги за прошлую лекцию

Проблемы порядка поиска методов (MRO)

В Java, кажется, нет множественного наследования

⇒ Нужна линеаризация

Python3: C3-линеаризация, т. е. превращение графа в список

method resolution order в Python3

super()

Вместо ссылки на заранее известный родительский класс изготовим прокси-объект super()

Исключения

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

Синтаксическая ошибка SyntaxError — не обрабатывается (ещё такие ошибки?)

Оператор try:

Оператор raise

Исключения — не «ошибки», а способ обработки некоторых условий не так, где они были обнаружены.

Пример:

   1 class Exc1(Exception): pass
   2 class Exc2(Exception): pass
   3 
   4 def funerr(a,b):
   5     if a<b:
   6         raise Exc1("A must be greater than B")
   7     return a//b
   8 
   9 def justfun(a,b):
  10     if a<b:
  11         raise Exc2("A must be greater than B")
  12     c = funerr(2*a, 3*b)
  13     return c
  14 
  15 for a,b in (10,3),(5,5),(10,0):
  16     try:
  17         c = justfun(a,b)
  18     except Exc1: 
  19         c = -1
  20     except Exc2: 
  21         c = -2
  22     except ZeroDivisionError: 
  23         c = -3
  24     print(c)

Исключения порождаются в разных местах, а обрабатываются в одном:

2
-1
-3

Д/З


TODO

LecturesCMC/PythonIntro2017/11_Exceptions (последним исправлял пользователь FrBrGeorge 2017-12-07 12:33:47)