Error false python

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

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

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

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

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

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

Ошибки могут быть разных видов:

  • Синтаксические
  • Недостаточно памяти
  • Ошибки рекурсии
  • Исключения

Разберем их по очереди.

Синтаксические ошибки (SyntaxError)

Синтаксические ошибки часто называют ошибками разбора. Они возникают, когда интерпретатор обнаруживает синтаксическую проблему в коде.

Рассмотрим на примере.

a = 8
b = 10
c = a b
File "", line 3
 c = a b
       ^
SyntaxError: invalid syntax

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

Недостаточно памяти (OutofMemoryError)

Ошибки памяти чаще всего связаны с оперативной памятью компьютера и относятся к структуре данных под названием “Куча” (heap). Если есть крупные объекты (или) ссылки на подобные, то с большой долей вероятности возникнет ошибка OutofMemory. Она может появиться по нескольким причинам:

  • Использование 32-битной архитектуры Python (максимальный объем выделенной памяти невысокий, между 2 и 4 ГБ);
  • Загрузка файла большого размера;
  • Запуск модели машинного обучения/глубокого обучения и много другое;

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

Но поскольку Python использует архитектуру управления памятью из языка C (функция malloc()), не факт, что все процессы восстановятся — в некоторых случаях MemoryError приведет к остановке. Следовательно, обрабатывать такие ошибки не рекомендуется, и это не считается хорошей практикой.

Ошибка рекурсии (RecursionError)

Эта ошибка связана со стеком и происходит при вызове функций. Как и предполагает название, ошибка рекурсии возникает, когда внутри друг друга исполняется много методов (один из которых — с бесконечной рекурсией), но это ограничено размером стека.

Все локальные переменные и методы размещаются в стеке. Для каждого вызова метода создается стековый кадр (фрейм), внутрь которого помещаются данные переменной или результат вызова метода. Когда исполнение метода завершается, его элемент удаляется.

Чтобы воспроизвести эту ошибку, определим функцию recursion, которая будет рекурсивной — вызывать сама себя в бесконечном цикле. В результате появится ошибка StackOverflow или ошибка рекурсии, потому что стековый кадр будет заполняться данными метода из каждого вызова, но они не будут освобождаться.

def recursion():
    return recursion()

recursion()
---------------------------------------------------------------------------

RecursionError                            Traceback (most recent call last)

 in 
----> 1 recursion()


 in recursion()
      1 def recursion():
----> 2     return recursion()


... last 1 frames repeated, from the frame below ...


 in recursion()
      1 def recursion():
----> 2     return recursion()


RecursionError: maximum recursion depth exceeded

Ошибка отступа (IndentationError)

Эта ошибка похожа по духу на синтаксическую и является ее подвидом. Тем не менее она возникает только в случае проблем с отступами.

Пример:

for i in range(10):
    print('Привет Мир!')
  File "", line 2
    print('Привет Мир!')
        ^
IndentationError: expected an indented block

Исключения

Даже если синтаксис в инструкции или само выражение верны, они все равно могут вызывать ошибки при исполнении. Исключения Python — это ошибки, обнаруживаемые при исполнении, но не являющиеся критическими. Скоро вы узнаете, как справляться с ними в программах Python. Объект исключения создается при вызове исключения Python. Если скрипт не обрабатывает исключение явно, программа будет остановлена принудительно.

Программы обычно не обрабатывают исключения, что приводит к подобным сообщениям об ошибке:

Ошибка типа (TypeError)

a = 2
b = 'PythonRu'
a + b
---------------------------------------------------------------------------

TypeError                                 Traceback (most recent call last)

 in 
      1 a = 2
      2 b = 'PythonRu'
----> 3 a + b


TypeError: unsupported operand type(s) for +: 'int' and 'str'

Ошибка деления на ноль (ZeroDivisionError)

10 / 0
---------------------------------------------------------------------------

ZeroDivisionError                         Traceback (most recent call last)

 in 
----> 1 10 / 0


ZeroDivisionError: division by zero

Есть разные типы исключений в Python и их тип выводится в сообщении: вверху примеры TypeError и ZeroDivisionError. Обе строки в сообщениях об ошибке представляют собой имена встроенных исключений Python.

Оставшаяся часть строки с ошибкой предлагает подробности о причине ошибки на основе ее типа.

Теперь рассмотрим встроенные исключения Python.

Встроенные исключения

BaseException
 +-- SystemExit
 +-- KeyboardInterrupt
 +-- GeneratorExit
 +-- Exception
      +-- StopIteration
      +-- StopAsyncIteration
      +-- ArithmeticError
      |    +-- FloatingPointError
      |    +-- OverflowError
      |    +-- ZeroDivisionError
      +-- AssertionError
      +-- AttributeError
      +-- BufferError
      +-- EOFError
      +-- ImportError
      |    +-- ModuleNotFoundError
      +-- LookupError
      |    +-- IndexError
      |    +-- KeyError
      +-- MemoryError
      +-- NameError
      |    +-- UnboundLocalError
      +-- OSError
      |    +-- BlockingIOError
      |    +-- ChildProcessError
      |    +-- ConnectionError
      |    |    +-- BrokenPipeError
      |    |    +-- ConnectionAbortedError
      |    |    +-- ConnectionRefusedError
      |    |    +-- ConnectionResetError
      |    +-- FileExistsError
      |    +-- FileNotFoundError
      |    +-- InterruptedError
      |    +-- IsADirectoryError
      |    +-- NotADirectoryError
      |    +-- PermissionError
      |    +-- ProcessLookupError
      |    +-- TimeoutError
      +-- ReferenceError
      +-- RuntimeError
      |    +-- NotImplementedError
      |    +-- RecursionError
      +-- SyntaxError
      |    +-- IndentationError
      |         +-- TabError
      +-- SystemError
      +-- TypeError
      +-- ValueError
      |    +-- UnicodeError
      |         +-- UnicodeDecodeError
      |         +-- UnicodeEncodeError
      |         +-- UnicodeTranslateError
      +-- Warning
           +-- DeprecationWarning
           +-- PendingDeprecationWarning
           +-- RuntimeWarning
           +-- SyntaxWarning
           +-- UserWarning
           +-- FutureWarning
           +-- ImportWarning
           +-- UnicodeWarning
           +-- BytesWarning
           +-- ResourceWarning

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

  • Try: он запускает блок кода, в котором ожидается ошибка.
  • Except: здесь определяется тип исключения, который ожидается в блоке try (встроенный или созданный).
  • Else: если исключений нет, тогда исполняется этот блок (его можно воспринимать как средство для запуска кода в том случае, если ожидается, что часть кода приведет к исключению).
  • Finally: вне зависимости от того, будет ли исключение или нет, этот блок кода исполняется всегда.

В следующем разделе руководства больше узнаете об общих типах исключений и научитесь обрабатывать их с помощью инструмента обработки исключения.

Ошибка прерывания с клавиатуры (KeyboardInterrupt)

Исключение KeyboardInterrupt вызывается при попытке остановить программу с помощью сочетания Ctrl + C или Ctrl + Z в командной строке или ядре в Jupyter Notebook. Иногда это происходит неумышленно и подобная обработка поможет избежать подобных ситуаций.

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

try:
    inp = input()
    print('Нажмите Ctrl+C и прервите Kernel:')
except KeyboardInterrupt:
    print('Исключение KeyboardInterrupt')
else:
    print('Исключений не произошло')

Исключение KeyboardInterrupt

Стандартные ошибки (StandardError)

Рассмотрим некоторые базовые ошибки в программировании.

Арифметические ошибки (ArithmeticError)

  • Ошибка деления на ноль (Zero Division);
  • Ошибка переполнения (OverFlow);
  • Ошибка плавающей точки (Floating Point);

Все перечисленные выше исключения относятся к классу Arithmetic и вызываются при ошибках в арифметических операциях.

Деление на ноль (ZeroDivisionError)

Когда делитель (второй аргумент операции деления) или знаменатель равны нулю, тогда результатом будет ошибка деления на ноль.

try:  
    a = 100 / 0
    print(a)
except ZeroDivisionError:  
    print("Исключение ZeroDivisionError." )
else:  
    print("Успех, нет ошибок!")
Исключение ZeroDivisionError.

Переполнение (OverflowError)

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

try:  
    import math
    print(math.exp(1000))
except OverflowError:  
    print("Исключение OverFlow.")
else:  
    print("Успех, нет ошибок!")
Исключение OverFlow.

Ошибка утверждения (AssertionError)

Когда инструкция утверждения не верна, вызывается ошибка утверждения.

Рассмотрим пример. Предположим, есть две переменные: a и b. Их нужно сравнить. Чтобы проверить, равны ли они, необходимо использовать ключевое слово assert, что приведет к вызову исключения Assertion в том случае, если выражение будет ложным.

try:  
    a = 100
    b = "PythonRu"
    assert a == b
except AssertionError:  
    print("Исключение AssertionError.")
else:  
    print("Успех, нет ошибок!")

Исключение AssertionError.

Ошибка атрибута (AttributeError)

При попытке сослаться на несуществующий атрибут программа вернет ошибку атрибута. В следующем примере можно увидеть, что у объекта класса Attributes нет атрибута с именем attribute.

class Attributes(obj):
    a = 2
    print(a)

try:
    obj = Attributes()
    print(obj.attribute)
except AttributeError:
    print("Исключение AttributeError.")

2
Исключение AttributeError.

Ошибка импорта (ModuleNotFoundError)

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

import nibabel
---------------------------------------------------------------------------

ModuleNotFoundError                       Traceback (most recent call last)

 in 
----> 1 import nibabel


ModuleNotFoundError: No module named 'nibabel'

Ошибка поиска (LookupError)

LockupError выступает базовым классом для исключений, которые происходят, когда key или index используются для связывания или последовательность списка/словаря неверна или не существует.

Здесь есть два вида исключений:

  • Ошибка индекса (IndexError);
  • Ошибка ключа (KeyError);

Ошибка ключа

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

try:  
    a = {1:'a', 2:'b', 3:'c'}  
    print(a[4])  
except LookupError:  
    print("Исключение KeyError.")
else:  
    print("Успех, нет ошибок!")

Исключение KeyError.

Ошибка индекса

Если пытаться получить доступ к индексу (последовательности) списка, которого не существует в этом списке или находится вне его диапазона, будет вызвана ошибка индекса (IndexError: list index out of range python).

try:
    a = ['a', 'b', 'c']  
    print(a[4])  
except LookupError:  
    print("Исключение IndexError, индекс списка вне диапазона.")
else:  
    print("Успех, нет ошибок!")
Исключение IndexError, индекс списка вне диапазона.

Ошибка памяти (MemoryError)

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

Ошибка имени (NameError)

Ошибка имени возникает, когда локальное или глобальное имя не находится.

В следующем примере переменная ans не определена. Результатом будет ошибка NameError.

try:
    print(ans)
except NameError:  
    print("NameError: переменная 'ans' не определена")
else:  
    print("Успех, нет ошибок!")
NameError: переменная 'ans' не определена

Ошибка выполнения (Runtime Error)

Ошибка «NotImplementedError»
Ошибка выполнения служит базовым классом для ошибки NotImplemented. Абстрактные методы определенного пользователем класса вызывают это исключение, когда производные методы перезаписывают оригинальный.

class BaseClass(object):
    """Опередляем класс"""
    def __init__(self):
        super(BaseClass, self).__init__()
    def do_something(self):
	# функция ничего не делает
        raise NotImplementedError(self.__class__.__name__ + '.do_something')

class SubClass(BaseClass):
    """Реализует функцию"""
    def do_something(self):
        # действительно что-то делает
        print(self.__class__.__name__ + ' что-то делает!')

SubClass().do_something()
BaseClass().do_something()

SubClass что-то делает!



---------------------------------------------------------------------------

NotImplementedError                       Traceback (most recent call last)

 in 
     14
     15 SubClass().do_something()
---> 16 BaseClass().do_something()


 in do_something(self)
      5     def do_something(self):
      6         # функция ничего не делает
----> 7         raise NotImplementedError(self.__class__.__name__ + '.do_something')
      8
      9 class SubClass(BaseClass):


NotImplementedError: BaseClass.do_something

Ошибка типа (TypeError)

Ошибка типа вызывается при попытке объединить два несовместимых операнда или объекта.

В примере ниже целое число пытаются добавить к строке, что приводит к ошибке типа.

try:
    a = 5
    b = "PythonRu"
    c = a + b
except TypeError:
    print('Исключение TypeError')
else:
    print('Успех, нет ошибок!')

Исключение TypeError

Ошибка значения (ValueError)

Ошибка значения вызывается, когда встроенная операция или функция получают аргумент с корректным типом, но недопустимым значением.

В этом примере встроенная операция float получат аргумент, представляющий собой последовательность символов (значение), что является недопустимым значением для типа: число с плавающей точкой.

try:
    print(float('PythonRu'))
except ValueError:
    print('ValueError: не удалось преобразовать строку в float: 'PythonRu'')
else:
    print('Успех, нет ошибок!')
ValueError: не удалось преобразовать строку в float: 'PythonRu'

Пользовательские исключения в Python

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

Это можно сделать, создав новый класс, который будет наследовать из класса Exception в Python.

class UnAcceptedValueError(Exception):   
    def __init__(self, data):    
        self.data = data
    def __str__(self):
        return repr(self.data)

Total_Marks = int(input("Введите общее количество баллов: "))
try:
    Num_of_Sections = int(input("Введите количество разделов: "))
    if(Num_of_Sections < 1):
        raise UnAcceptedValueError("Количество секций не может быть меньше 1")
except UnAcceptedValueError as e:
    print("Полученная ошибка:", e.data)

Введите общее количество баллов: 10
Введите количество разделов: 0
Полученная ошибка: Количество секций не может быть меньше 1

В предыдущем примере если ввести что-либо меньше 1, будет вызвано исключение. Многие стандартные исключения имеют собственные исключения, которые вызываются при возникновении проблем в работе их функций.

Недостатки обработки исключений в Python

У использования исключений есть свои побочные эффекты, как, например, то, что программы с блоками try-except работают медленнее, а количество кода возрастает.

Дальше пример, где модуль Python timeit используется для проверки времени исполнения 2 разных инструкций. В stmt1 для обработки ZeroDivisionError используется try-except, а в stmt2if. Затем они выполняются 10000 раз с переменной a=0. Суть в том, чтобы показать разницу во времени исполнения инструкций. Так, stmt1 с обработкой исключений занимает больше времени чем stmt2, который просто проверяет значение и не делает ничего, если условие не выполнено.

Поэтому стоит ограничить использование обработки исключений в Python и применять его в редких случаях. Например, когда вы не уверены, что будет вводом: целое или число с плавающей точкой, или не уверены, существует ли файл, который нужно открыть.

import timeit
setup="a=0"
stmt1 = '''
try:
    b=10/a
except ZeroDivisionError:
    pass'''

stmt2 = '''
if a!=0:
    b=10/a'''

print("time=",timeit.timeit(stmt1,setup,number=10000))
print("time=",timeit.timeit(stmt2,setup,number=10000))

time= 0.003897680000136461
time= 0.0002797570000439009

Выводы!

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

Обработка исключений — один из основных факторов, который делает код готовым к развертыванию. Это простая концепция, построенная всего на 4 блоках: try выискивает исключения, а except их обрабатывает.

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

Improve Article

Save Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Errors are the problems in a program due to which the program will stop the execution. On the other hand, exceptions are raised when some internal events occur which changes the normal flow of the program. 
    Two types of Error occurs in python. 
     

    1. Syntax errors
    2. Logical errors (Exceptions) 
       

    Syntax errors

    When the proper syntax of the language is not followed then a syntax error is thrown.
    Example 
     

    Python3

    amount = 10000

    if(amount>2999)

        print("You are eligible to purchase Dsa Self Paced")

    Output:
     

    It returns a syntax error message because after the if statement a colon: is missing. We can fix this by writing the correct syntax.
     

    logical errors(Exception)

    When in the runtime an error that occurs after passing the syntax test is called exception or logical type. For example, when we divide any number by zero then the ZeroDivisionError exception is raised, or when we import a module that does not exist then ImportError is raised.
    Example 1: 
     

    Python3

    marks = 10000

    a = marks / 0

    print(a)

    Output:
     

    In the above example the ZeroDivisionError as we are trying to divide a number by 0.
    Example 2: When indentation is not correct. 
     

    Python3

    Output:
     

    Some of the common built-in exceptions are other than above mention exceptions are:
     

    Exception Description
    IndexError When the wrong index of a list is retrieved.
    AssertionError It occurs when the assert statement fails
    AttributeError It occurs when an attribute assignment is failed.
    ImportError It occurs when an imported module is not found.
    KeyError It occurs when the key of the dictionary is not found.
    NameError It occurs when the variable is not defined.
    MemoryError It occurs when a program runs out of memory.
    TypeError It occurs when a function and operation are applied in an incorrect type.

    Note: For more information, refer to Built-in Exceptions in Python
     

    Error Handling

    When an error and an exception are raised then we handle that with the help of the Handling method.
     

    • Handling Exceptions with Try/Except/Finally 
      We can handle errors by the Try/Except/Finally method. we write unsafe code in the try, fall back code in except and final code in finally block.
      Example 
       

    Python3

    try:

         print("code start")

         print(1 / 0)

    except:

         print("an error occurs")

    finally:

         print("GeeksForGeeks")

    • Output: 
       
    code start
    an error occurs
    GeeksForGeeks
    •  
    • Raising exceptions for a predefined condition 
      When we want to code for the limitation of certain conditions then we can raise an exception. 
      Example 
       

    Python3

    try:

        amount = 1999

        if amount < 2999:

            raise ValueError("please add money in your account")

        else:

            print("You are eligible to purchase DSA Self Paced course")

    except ValueError as e:

            print(e)

    • Output: 
       
    please add money in your account

    Понятие исключений и ошибок

    Любой, даже самый опытный программист, в ходе разработки программ допускает различного рода ошибки, приводящие к тому, что программа либо не работает вообще,
    либо работает, но выполняет вовсе не то, что задумывалось. Причинами ошибок могут быть как неправильное использование синтаксиса и пунктуации языка
    (синтаксические ошибки), так и неверное понимание логики программы (семантические ошибки, которые в Python принято называть
    исключениями). При этом, если первый тип ошибок легко обнаружить с помощью интерпретатора, то на устранение логических ошибок
    порой может потребоваться не один час, поскольку такие ошибки обнаруживаются уже непосредственно в ходе использования программы, проявляясь либо в виде сбоев
    в ее работе, либо в получении совершенно непредвиденных результатов (см. пример №1).

    # Синтаксические ошибки обнаружить легко.
    
    # Имя переменной начали с цифры.
    # SyntaxError: invalid decimal literal
    # 35_days = 35
    
    # Строка должна содержать запись целого числа.
    # ValueError: invalid literal for int() with base 10: 'три'
    # num = int('три')    
    
    # Числа и строки складывать нельзя.
    # TypeError: unsupported operand type(s) for +: 'int' and 'str'
    # res = 5 + 'один'     
    
    # Логические ошибки всплывут потом.    
    
    # На первый взгляд все верно, и программа даже будет  
    # работать, но только до тех пор, пока пользователь 
    # не введет ноль или неприводимое к числу значение.
    a = int(input('Введите число: '))
    print(10/a)
    Введите число: 0
    ZeroDivisionError: division by zero
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    		
    			

    Пример №1. Синтаксические и логические ошибки в Python.

    В примере мы показали лишь несколько видов исключений. На самом деле их намного больше. И очень важно знать о них, а также иметь инструменты для их обнаружения и
    обработки. Именно поэтому в стандартной библиотеке Python присутствует внушительный набор готовых классов, представляющих различные
    виды исключений и синтаксических ошибок. Все они перечислены в разделе Built-in exceptions,
    где также представлена и подробная иерархия имеющихся классов исключений. Что касается обработки ошибок, то для этого Python
    предоставляет ряд специальных инструкций, которые мы и будем рассматривать в данном параграфе.

    Инструкция try/except/else/finally

    Пожалуй, основной «рабочей лошадкой» по обработке исключений в Python является составная инструкция
    try/except/else/finally, которая имеет следующий общий формат:

    # Сначала выполняется основной блок инструкций.
    try:
        <Основные инструкции>     
    # Запускается, если в блоке try возникло исключение Exception_1.
    except Exception_1:
        <Инструкции обработки исключения>     
    # Запускается, если возникло любое из перечисленных исключений.
    except (Exception_2, Exception_3):
        <Инструкции обработки исключений>     
    # Работаем с экземпляром Exception_4, как с err.
    except Exception_4 as err:
        <Инструкции обработки исключения>     
    # Запускается для всех видов исключений.                    
    except:
        <Инструкции обработки исключений>     
    # Запускается, если в блоке try не возникло исключений.
    else:
        <Дополнительные инструкции>
    # Запускается в любом случае.
    finally:
        <Финальные инструкции>

    Первыми выполняются инструкции основного блока try. При обнаружении в нем ошибок, интерпретатор пытается найти соответствующий
    возникшему исключению блок except и, в случае наличия такового, выполняет его инструкции. После того как исключение будет
    обработано, оно уничтожается, а программа пытается продолжить работу в штатном режиме. Если же среди имеющихся блоков except
    соот­ветствия найдено не будет, исключение переадресуется инструкции try, стоящей
    выше в программе, или на верхний уровень процесса, что скорее всего вынудит интерпретатор аварийно завершить работу программы и вывести сообщение об ошибке по
    умолчанию. В случае отсутствия ошибок в блоке try интерпретатор пропускает все блоки except и
    начинает выполнять инструкции необязательного блока else, который разрешается использовать только при наличии хотя бы одного блока
    except. При этом стоит помнить, что при наличии ошибок в блоке try инструкции данного блока
    выполняться не будут. Что касается необязательного блока finally, то он используется для каких-либо завершающих операций, например,
    закрытия файлов или открытых соединений с сервером. Его инструкции выполняются всегда, вне зависимости от того, возникли исключения в каком-либо блоке, включая блок
    else, или нет (см. пример №2).

    try:
        # Здесь исключения могут возбудиться из-за 
        # ввода нечислового значения или нуля.
        a = int(input('Введите число: '))
        print('10/{} = {}'.format(a, 10/a))    
    # Если введено не целое число.
    except ValueError:
        print('Введите целое число!')
    # Если введен ноль.
    except ZeroDivisionError:
        print('На ноль делить нельзя!')
    # Выполнится только при отсутствии ошибок.	
    else:
        print('Операция прошла успешно!')
    # Выполняется в любом случае.
    finally:
        print('Для завершения нажмите «Enter»!')    
        # Чтобы окно консоли не закрылось. 
        input()
    Введите число: 0
    На ноль делить нельзя!
    Для завершения нажмите «Enter»!
    
    -------------------------------
    
    Введите число: один
    Введите целое число!
    Для завершения нажмите «Enter»!
    
    -------------------------------
    
    Введите число: 20
    10/20 = 0.5
    Операция прошла успешно!
    Для завершения нажмите «Enter»!
    
    
    			

    Пример №2. Инструкция try/except/else/finally в Python (часть 1).

    Стоит заметить, что в отличие от блоков except блок finally не останавливает распространение
    исключений до вышестоящей инструкции try или до обработчика исключений по умолчанию, т.е. в случае возникновения ошибок
    инструкции, следующие за блоком finally в программе, выполняться не будут (см. пример №3).

    # Внешняя инструкция try.
    try:
        # Внутреняя инструкция try.
        try:
            # Здесь исключения могут появиться из-за 
            # ввода нечислового значения или нуля.
            a = int(input('Введите число: '))
            print('10/{} = {}'.format(a, 10/a))    
        # Выполняется в любом случае.
        finally:
            print('Внутренний блок finally.')    
        
        # Выполняется при отсутствии ошибок
        # во внутреннем блоке try.
        print('Все ОК! Ошибок нет!')
        
    # Если введено не целое число или ноль.
    except (ValueError, ZeroDivisionError):
        print('Неверный ввод!')
    # Выполнится только при отсутствии ошибок.	
    else:
        print('Операция прошла успешно!') 
    # Выполняется в любом случае.
    finally:
        print('Внешний блок finally.')
        # Чтобы окно консоли не закрылось. 
        input() 
    Введите число: 7
    10/7 = 1.4285714285714286
    Внутренний блок finally.
    Все ОК! Ошибок нет!
    Операция прошла успешно!
    Внешний блок finally.
    
    ------------------------
    
    Введите число: 0
    Внутренний блок finally.
    Неверный ввод!
    Внешний блок finally.
    
    
    
    
    
    
    
    
    
    
    
    
    		
    			

    Пример №3. Инструкция try/except/else/finally в Python (часть 2).

    Если необходимо перехватывать сразу все возможные исключения, разрешается использовать инструкцию except без указания классов исключений.
    Эта особенность может быть весьма удобна при разработке своих собственных обработчиков ошибок. Однако при использовании такого варианта могут перехватываться нежелательные
    системные исключения, не связанные с работой создаваемого программного кода, а также случайно может прерываться распространение исключений, предназначенных для других
    обработчиков. Данная проблема была частично решена в Python 3.0 за счет введения альтернативы в виде суперкласса
    Exception, представляющего все прикладные исключения, но игнорирующего исключения, связанные с завершением программы (см. пример
    №4).

    # Основной блок try.
    try:
        # Здесь исключения могут возбудиться из-за 
        # ввода нечислового значения или нуля.
        a = int(input('Введите число: '))
        print('10/{} = {}'.format(a, 10/a))    
         
    # Выводим строковое представление исключения.
    except Exception as err:
        print(err)
    # Выполнится только при отсутствии ошибок.	
    else:
        print('Операция прошла успешно!') 
    # Выполняется в любом случае.
    finally:
        # Чтобы окно консоли не закрылось. 
        input() 
    Введите число: one
    invalid literal for int() with base 10: 'one'
    
    ------------------------
    
    Введите число: 0
    division by zero
    
    ------------------------
    
    Введите число: 10
    10/10 = 1.0
    Операция прошла успешно!
    
    
    		
    			

    Пример №4. Инструкция try/except/else/finally в Python (часть 3).

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

    Инструкция raise

    В примерах выше мы полагались на то, что интерпретатор автоматически определит появление ошибок во время выполнения программного кода. Однако в
    Python присутствует возможность и явного возбуждения исключений с помощью инструкции
    raise. Все что от нас требуется, это указать через пробел имя класса или экземпляра
    возбуждаемого исключения. Также разрешается использовать пустую инструкцию, тогда будет повторно возбуждено самое последнее исключение
    (см. пример №5).

    try:
        # Возбудим исключение IndexError принудительно.
        # Экземпляр исключения создается автоматически.
        raise IndexError    
    # Обработаем его.
    except IndexError:
        print('Перехватили IndexError!')
    
    try:
        # Все тоже самое, но здесь создаем экземпляр сами.
        raise IndexError()   
    # Обработаем его.
    except IndexError:
        print('Перехватили IndexError!')  
        # Вложенная инструкция try.
        try:
            # Возбудили последнее исключение еще раз.
            raise   
        # Обработаем его.
        except IndexError:
            print('Перехватили IndexError!')
    Перехватили IndexError!
    Перехватили IndexError!
    Перехватили IndexError!
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    		
    			

    Пример №5. Инструкция raise в Python (часть 1).

    Инструкция raise может использоваться для явного возбуждения не только встроенных исключений, но и созданных пользователем.
    Пользовательские исключения представляют собой самые обычные классы, наследуемые от классов встроенных исключений, чаще всего от класса
    Exception (см. пример №6).

    # Создаем свой класс исключений, который 
    # наследуется от встроенного Exception.
    class OnlyAlpha(Exception): 
        # Переопределим строковое представление.
        def __str__(self): 
            return 'Разрешены только буквы!'
    
    # Определим функцию проверки строки на
    # наличие сторонних небуквенных символов.
    def check_for_alpha(s):
        # Если присутствуют не только буквы.  
        if not s.isalpha():
            # Возбуждаем экземпляр своего исключения.
            raise OnlyAlpha()       
    
    # Проверим, как все работает.
    try:
        # Просим ввести строку.
        s = input('Введите имя: ')
        # Проверяем ввод.    
        check_for_alpha(s)
    # Обрабатываем польз. исключение.
    except OnlyAlpha as err:
        # Строковое представление экз.
        print(err)
        print('Попробуйте еще раз!')    
    # Если все прошло гладко.
    else:
        # Выводим введенное имя.
        print('Привет, {}!'.format(s))
    # В любом случае дополняем сообщением.
    finally:       
        print('Имя – это ваш ник и логин!')
    Введите имя: okpython
    Привет, okpython!
    Имя – это ваш ник и логин!
    
    --------------------------
    
    Введите имя: okpython.net
    Разрешены только буквы!
    Попробуйте еще раз!
    Имя – это ваш ник и логин!
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    		
    			

    Пример №6. Инструкция raise в Python (часть 2).

    Стоит добавить, что инструкция raise может использоваться и в формате raise/from, который используется
    значительно реже, поэтому здесь мы его рассматривать не будем. Однако не поленитесь и самостоятельно посетите подраздел
    «The raise statement» раздела «Simple statements» официального
    справочника языка, где хотя бы бегло ознакомьтесь и с этим вариантом инструкции.

    Инструкция assert

    Инструкция assert представляет собой компактный условный вариант инструкции raise,
    предназначенный в основном для возбуждения исключений на этапе отладки программы. В общем виде ее можно представить в формате
    assert condition[, message], где condition – это условие, при невыполнении которого
    (возвращается False) будет возбуждено встроенное исключение AssertionError, а также при необходимости
    выведено необязательное сообщение message (см. пример №7).

    # Допустим мы пишем функцию для расчета среднего
    # значения чисел переданного ей списка.
    def avg(li):
        len_li = len(li)
        # Список не должен быть пустым.
        assert len_li != 0, 'Список пуст!'    
        # Возвращаем среднее значение.
        return round(sum(li)/len_li, 3)
    
    try:
       # Запускаем функцию.  
       res = avg([]) 
    # Отлавливаем исключение для обработки.
    except AssertionError as my_err:
        print(my_err)
    # Результат выводим, если все в порядке.
    else:
        print('Среднее значение: {}'.format(res)) 
    Список пуст!
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    		
    			

    Пример №7. Инструкция assert в Python.

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

    Краткие итоги параграфа

    • Основной инструкцией для обработки исключений в Python является составная инструкция try/except/else/finally.
      Если в инструкциях обязательного блока try возникают ошибки, интерпретатор пытается перехватить и обработать их с помощью блоков
      except. В случае отсутствия соответствий исключение передается инструкции try, стоящей выше в программе,
      или на верхний уровень процесса. Необязательный блок else выполняется только при отсутствии ошибок, а необязательный блок
      finally выполняется всегда. При этом в отличие от блоков except блок
      finally не останавливает распространение исключений до вышестоящей инструкции try или до обработчика
      исключений по умолчанию, поэтому в случае возникновения ошибок инструкции, следующие за блоком finally в программе, выполняться не будут.
    • В стандартной библиотеке Python присутствует внушительный набор готовых классов, представляющих различные виды исключений и синтаксических
      ошибок. Все они перечислены в разделе Built-in exceptions, где также представлена и подробная
      иерархия имеющихся классов исключений.
    • Важно помнить, что при использовании блока except без указания класса перехватываемого исключения интерпретатор будет пытаться перехватить
      все имеющиеся виды встроенных исключений. Однако нужно быть осторожным при использовании такого варианта инструкции воизбежание перехвата нежелательных системных исключений,
      не связанных с работой создаваемого программного кода.
    • Для явного возбуждения исключений в Python предназначена инструкция raise, которой необходимо через
      пробел передавать имя класса или экземпляра возбуждаемого исключения. Данная инструкция может использоваться для явного возбуждения не только встроенных исключений, но
      и созданных пользователем. Пользовательские исключения представляют собой самые обычные классы, наследуемые от классов встроенных исключений, чаще всего от класса
      Exception.
    • Для возбуждения исключений на этапе отладки программы предназначена инструкция assert condition[, message], где
      condition – это условие, при невыполнении которого (возвращается False) будет возбуждено
      встроенное исключение AssertionError, а также при необходимости выведено необязательное сообщение message.
      Использовать инструкцию следует главным образом для проверки соблюдения ограничений, накладываемых самим программистом, а не для перехвата настоящих ошибок, которые могут
      быть спокойно перехвачены интерпретатором Python.

    Помогите проекту, подпишитесь!

    Подписка на учебные материалы сайта оформляется сроком на один год и стоит около 15 у.е. После
    подписки вам станут доступны следующие возможности.

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

    Python для начинающих
    На страницу подписки

    Вопросы и задания для самоконтроля

    1. В каком случае выполняется код блока else составной инструкции
    try/except/else/finally?

    Показать решение.

    Ответ. Инструкции необязательного блока else выполняются только при отсутствии
    исключений в коде основного блока try.

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

    Показать решение.

    Ответ. В таком случае исключение будет передано обработчику предоставляемому интерпретатором по умолчанию.
    Этот обработчик выведет сообщение об ошибке и завершит программу.

    3. Перечислите верные форматы использования инструкции try:
    try/except/else, try/else, try/finally,
    try/except/finally, try/else/finally.

    Показать решение.

    Ответ. Блок else может использоваться только при наличии хотя бы одного блока
    except, следовательно варианты try/else и try/else/finally
    недопустимы.

    4. В каком случае выполняется код блока finally?

    Показать решение.

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

    5. Присутствуют ли в коде условия ошибки? Проверьте свой ответ, запустив код на исполнение.
    Показать решение.

    try:
        a = 5; b = 0
        n = a/b   
    exept Exeption as err:
        print('Ошибка: «{}».'.format(err))
    else:
        print('a/b = {}'.format(n)) 
    finally: 
        print('Обработка завершена!')

    try:
        a = 5; b = 0
        n = a/b   
    # Правильно писать except и Exception.
    except Exception as err:
        print('Ошибка: «{}».'.format(err))
    else:
        print('a/b = {}'.format(n)) 
    finally: 
        print('Обработка завершена!')
    Ошибка: «division by zero».
    Обработка завершена!
    
    
    
    
    
    
    
    			

    6. Имеется ли в Python возможность создавать и возбуждать исключения вручную?

    Показать решение.

    Ответ. Да, имеется. Для явного возбуждения исключений в Python предназначена
    инструкция raise, которой необходимо через пробел передавать имя класса или экземпляра возбуждаемого исключения. Данная
    инструкция может использоваться для явного возбуждения не только встроенных исключений, но и созданных пользователем. Пользовательские исключения представляют
    собой самые обычные классы, наследуемые от классов встроенных исключений, чаще всего от класса Exception.

    7. Для чего служит инструкция assert?

    Показать решение.

    Ответ. Для возбуждения исключений на этапе отладки программы предназначена инструкция
    assert condition[, message], где condition – это условие, при невыполнении
    которого (возвращается False) будет возбуждено встроенное исключение AssertionError,
    а также при необходимости выведено необязательное сообщение message. Использовать инструкцию следует главным образом
    для проверки соблюдения ограничений, накладываемых самим программистом, а не для перехвата настоящих ошибок, которые могут быть спокойно перехвачены
    интерпретатором Python.

    8. Дополнительные упражнения и задачи по теме расположены в разделе
    «Обработка исключений»
    нашего сборника задач и упражнений по языку программирования Python.

    Быстрый переход к другим страницам

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

    Исключения в языках программирования

    Исключениями (exceptions) в языках программирования называют проблемы, возникающие в ходе выполнения программы, которые допускают возможность дальнейшей ее работы в рамках основного алгоритма. Типичным примером исключения является деление на ноль, невозможность считать данные из файла (устройства), отсутствие доступной памяти, доступ к закрытой области памяти и т.п. Для обработки таких ситуаций в языках программирования, как правило, предусматривается специальный механизм, который называется обработка исключений (exception handling).

    Исключения разделяют на синхронные и асинхронные. Синхронные исключения могут возникнуть только в определенных местах программы. Например, если у вас есть код, который открывает файл и считывает из него данные, то исключение типа “ошибка чтения данных” может произойти только в указанном куске кода. Асинхронные исключения могут возникнуть в любой момент работы программы, они, как правило, связаны с какими-либо аппаратными проблемами, либо приходом данных. В качестве примера можно привести сигнал отключения питания.

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

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

    В Python выделяют два различных вида ошибок: синтаксические ошибки и исключения.

    Синтаксические ошибки в Python

    Синтаксические ошибки возникают в случае если программа написана с нарушениями требований Python к синтаксису. Определяются они в процессе парсинга программы. Ниже представлен пример с ошибочным написанием функции print.

    >>> for i in range(10):
        prin("hello!")
    
    Traceback (most recent call last):
      File "<pyshell#2>", line 2, in <module>
        prin("hello!")
    NameError: name 'prin' is not defined
    

    Исключения в Python

    Второй вид ошибок – это исключения. Они возникают в случае если синтаксически программа корректна, но в процессе выполнения возникает ошибка (деление на ноль и т.п.). Более подробно про понятие исключения написано выше, в разделе “исключения в языках программирования”.

    Пример исключения ZeroDivisionError, которое возникает при делении на 0.

    >>> a = 10
    >>> b = 0
    >>> c = a / b
    Traceback (most recent call last):
      File "<pyshell#5>", line 1, in <module>
        c = a / b
    ZeroDivisionError: division by zero
    

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

    Иерархия исключений в Python

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

    BaseException
    +– SystemExit
    +– KeyboardInterrupt
    +– GeneratorExit
    +– Exception
         +– StopIteration
         +– StopAsyncIteration
         +– ArithmeticError
         |    +– FloatingPointError
         |    +– OverflowError
         |    +– ZeroDivisionError
         +– AssertionError
         +– AttributeError
         +– BufferError
         +– EOFError
         +– ImportError
              +– ModuleNotFoundError
         +– LookupError
         |    +– IndexError
         |    +– KeyError
         +– MemoryError
         +– NameError
         |    +– UnboundLocalError
         +– OSError
         |    +– BlockingIOError
         |    +– ChildProcessError
         |    +– ConnectionError
         |    |    +– BrokenPipeError
         |    |    +– ConnectionAbortedError
         |    |    +– ConnectionRefusedError
         |    |    +– ConnectionResetError
         |    +– FileExistsError
         |    +– FileNotFoundError
         |    +– InterruptedError
         |    +– IsADirectoryError
         |    +– NotADirectoryError
         |    +– PermissionError
         |    +– ProcessLookupError
         |    +– TimeoutError
         +– ReferenceError
         +– RuntimeError
         |    +– NotImplementedError
         |    +– RecursionError
         +– SyntaxError
         |    +– IndentationError
         |         +– TabError
         +– SystemError
         +– TypeError
         +– ValueError
         |    +– UnicodeError
         |         +– UnicodeDecodeError
         |         +– UnicodeEncodeError
         |         +– UnicodeTranslateError
         +– Warning
              +– DeprecationWarning
              +– PendingDeprecationWarning
              +– RuntimeWarning
              +– SyntaxWarning
              +– UserWarning
              +– FutureWarning
              +– ImportWarning
              +– UnicodeWarning
              +– BytesWarning
              +– ResourceWarning

    Как видно из приведенной выше схемы, все исключения являются подклассом исключения BaseException. Более подробно об иерархии исключений и их описании можете прочитать здесь.

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

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

    print("start")
    try:
       val = int(input("input number: "))
       tmp = 10 / val
       print(tmp)
    except Exception as e:
       print("Error! " + str(e))
    print("stop")
    

    В приведенной выше программе возможных два вида исключений – это ValueError, возникающее в случае, если на запрос программы “введите число”, вы введете строку, и ZeroDivisionError – если вы введете в качестве числа 0.

    Вывод программы при вводе нулевого числа будет таким.

    start input number: 0 Error! stop

    Если бы инструкций try…except не было, то при выбросе любого из исключений программа аварийно завершится.

    print("start")
    val = int(input(“input number: “))
    tmp = 10 / val
    print(tmp)
    print("stop")
    

    Если ввести 0 на запрос приведенной выше программы, произойдет ее остановка с распечаткой сообщения об исключении.

    start

    
    

    input number: 0

    
    

    Traceback (most recent call last):

    
    

     File “F:/work/programming/python/devpractice/tmp.py”, line 3, in <module>

    
    

       tmp = 10 / val

    
    

    ZeroDivisionError: division by zero

    Обратите внимание, надпись stop уже не печатается в конце вывода программы.

    Согласно документу по языку Python, описывающему ошибки и исключения, оператор try работает следующим образом:

    • Вначале выполняется код, находящийся между операторами try и except.
    • Если в ходе его выполнения исключения не произошло, то код в блоке except пропускается, а код в блоке try выполняется весь до конца.
    • Если исключение происходит, то выполнение в рамках блока try прерывается и выполняется код в блоке except. При этом для оператора except можно указать, какие исключения можно обрабатывать в нем. При возникновении исключения, ищется именно тот блок except, который может обработать данное исключение.
    • Если среди except блоков нет подходящего для обработки исключения, то оно передается наружу из блока try. В случае, если обработчик исключения так и не будет найден, то исключение будет необработанным (unhandled exception) и программа аварийно остановится.

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

    Если бы мы в нашей программе хотели обрабатывать только ValueError и ZeroDivisionError, то программа выглядела бы так.

    print("start")
    try:
       val = int(input("input number: "))
       tmp = 10 / val
       print(tmp)
    except(ValueError, ZeroDivisionError):
       print("Error!")
    print("stop")
    

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

    print("start")
    try:
       val = int(input("input number: "))
       tmp = 10 / val
       print(tmp)
    except ValueError:
       print("ValueError!")
    except ZeroDivisionError:
       print("ZeroDivisionError!")
    except:
       print("Error!")
    print("stop")
    

    Существует возможность передать подробную информацию о произошедшем исключении в код внутри блока except.

    rint("start")
    try:
       val = int(input("input number: "))
       tmp = 10 / val
       print(tmp)
    except ValueError as ve:
       print("ValueError! {0}".format(ve))
    except ZeroDivisionError as zde:
       print("ZeroDivisionError! {0}".format(zde))
    except Exception as ex:
       print("Error! {0}".format(ex))
    print("stop")
    

    Использование finally в обработке исключений

    Для выполнения определенного программного кода при выходе из блока try/except, используйте оператор finally.

    try:
       val = int(input("input number: "))
       tmp = 10 / val
       print(tmp)
    except:
       print("Exception")
    finally:
      print("Finally code")
    

    Не зависимо от того, возникнет или нет во время выполнения кода в блоке try исключение, код в блоке finally все равно будет выполнен.

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

    try:
       f = open("tmp.txt", "r")
       for line in f:
           print(line)
       f.close()
    except Exception as e:
       print(e)
    else:
       print("File was readed")
    

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

    Для принудительной генерации исключения используется инструкция raise.

    Самый простой пример работы с raise может выглядеть так.

    try:
       raise Exception("Some exception")
    except Exception as e:
       print("Exception exception " + str(e))
    

    Таким образом, можно “вручную” вызывать исключения при необходимости.

    Пользовательские исключения (User-defined Exceptions) в Python

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

    Для реализации собственного типа исключения необходимо создать класс, являющийся наследником от одного из классов исключений.

    class NegValException(Exception):
       pass
    
    try:
       val = int(input("input positive number: "))
       if val < 0:
           raise NegValException("Neg val: " + str(val))
       print(val + 10)
    except NegValException as e:
      print(e)
    

    P.S.

    Если вам интересна тема анализа данных, то мы рекомендуем ознакомиться с библиотекой Pandas. На нашем сайте вы можете найти вводные уроки по этой теме. Все уроки по библиотеке Pandas собраны в книге “Pandas. Работа с данными”.
    Книга: Pandas. Работа с данными

    <<< Python. Урок 10. Функции в Python   Python. Урок 12. Ввод-вывод данных. Работа с файлами>>>

    Понравилась статья? Поделить с друзьями:
  • Error failure processing png image
  • Error failure enumerating files in directory
  • Error failedepicauthtoken among us
  • Error failed while fetching server version could be due to unauthorized access
  • Error failed to update magicad cuix mnr file