Step 4 (S-100257)

From Stepik Wiki
Jump to: navigation, search

Step on Stepik: https://stepik.org/lesson/24463/step/4

Step 4 (S-100257) 1.png

[00:00 - 00:18] однако не все ошибки которые возникают в процессе исполнения нашего кода достаточно фатальны и то что мы перестали исполнять код вообще некоторых есть ошибок можем поймать и затем обработать в этим постом как мы можем это сделать например когда вы пытаетесь запустить данный год то мы получим сами это просто потому что


[00:18 - 00:35] я нашел в списке есть как строковые так и числовые значения этому не сможет его сортировать потому что их он не может сравнить чтобы мы хотели сделать но вы хотели бы запустить данный код и если внутри него возникло исключение то обработать его выпустим вывести на экран что


[00:35 - 00:51] случилось может вспомню дальше и вывести принт этим catch а если исключение здесь ни случилось мы просто хотели бы продолжить исполнение кода для этого в языке поэтому есть инструкция пишем тратим газом двоеточие


[00:51 - 01:08] сделайте сноску 4 пробела и в теле tribal указываем тот который мы хотели запустить проверить оказывающего и тип того исключение которое может возникнуть в процессе исполнения тело try здесь мы оказываем тает потому что мы боимся что он возникнет


[01:08 - 01:26] стань также двоеточие изнутри тела except ему указывают что же делать в том случае когда тает р действительно возник внутри тела нашел try давайте просто будем вот такое сообщение грустный и говорит нам о том что там внутри возник


[01:26 - 01:42] теперь давайте запустим мы убедимся в том что исполнения нашей программы не прервалась и что внутри действительно возник тайп р то есть когда то записать метод sort возникает р он дошел до блока accept увидел что мы ловим


[01:42 - 01:57] так светло и ну и значение type успешно продолжит исполнять код до конца замечательно это именно то поведение которое мы хотели мы решаем что такая вот возникновения ошибки в том месте программа


[01:57 - 02:12] является не критично для того чтобы целиком останавливать исполнения всех программ конструкция try except позволяет нам выбрать типы ошибок которые мы считаем критичными как ты их обработать и затем продолжить исполнение кода затем попробую как можно больше узнать о try except блогах


[02:12 - 02:31] пишем функцию ф от икс игрик который будет пытаться вернуть значение икс деленное на или нашем случае мы пока что пытаемся поймать только type error и вывести т р на экран если на его поймали тогда несложно убедиться в том что если мы запустим данную функцию значение 5 и 10000 поймаем title


[02:31 - 02:50] потому что мы не можем разделить 5 на пустой список так же с ними передадим допустим вместо пустого списка строку общем то же самое что в общем то и логично что произойдет если в качестве 2 аргумента наговорил передать 0 и вывести допустим это значение на экран


[02:50 - 03:08] когда мы запустим мы увидим что на самом деле у нас происходит за division р конечно мы не можем разделить целое число 0 языке python на как это не является ошибкой типа появляется ошибка скорее арифметическое здесь появляется 1 правило trucks в локо то что если внутри


[03:08 - 03:25] блока произошло исключение которое мы не знаем какие нибудь accent блоком тогда это исключение ведет себя так же как если бы этот трейд локк не было тогда стажем можем сделать чтобы пытаться обработать деление на 0 прежде всего он бы не попробовать еще 1 блок


[03:25 - 03:43] и допустим поймать др division р и написать например что что мы делили на 0 очень грустно очень жаль запуститься и убедиться в том что


[03:43 - 03:58] когда мы запускаем функции пытаемся вывести его таким вот образом мы действительно напечатали значение задержан при этом не вернули никакого значения потому что если я находился внутри try блока я бы с полной расовой функции не вернул значение тому же или на экран


[03:58 - 04:16] пишем сразу несколько exit блок важно помнить о том что любое исключение будет обработано лишь 1 из них 1 под которое она подойдет остальные блоки просто не будет исполняться однако мы могли бы поймать ошибку но еще по другому важно помнить что вы можете говорить наши исключений в любой момент исполнения на стояке


[04:16 - 04:33] то есть мы могли бы поймать это исключение вот здесь внутри функции и на самом деле если здесь не при функционировании ловим мы могли бы попытаться понимать деление на 0 когда запускаем нашу функцию с от 0 пробовать запустить данный код


[04:33 - 04:49] и попытаться здесь поймать жар division и убедиться в том что на его действительно ловят и запустить данный код однако можем поймать 1 их собакам сразу несколько типов исключений


[04:49 - 05:04] этого нужно передавать в except кортеж содержащаяся в этих исключений вернуться к 1 варианту который мы написали функции у которых содержал 20 блока эти на самом деле вместо них кортеж


[05:04 - 05:21] которая содержит ошибок и в индию просто сообщение о том что нас было какое либо запустим данный код произошел р н значение нам итак если мы передадим


[05:21 - 05:41] функции а функция обозначения 5 и допустим достать список то мы эту ошибку также обработан также и закопать не можем поймать и сам объект ошибки для этого нам нужно указать после типа которое мы ловим с и на этом объекте который мы хотели поймать то есть


[05:41 - 05:55] здесь после cortege можем указать с е и тогда внутри этого accept блок он будет определено имя я в котором будет содержаться объект нашей ошибки можно вывести например тип ошибки я


[05:55 - 06:14] можно допустим вместе со мною я и так же у любой ошибке есть атрибут который тоже иногда полезно давать исполнить следующий год и что же мы увидели на экране со сном и засыпаешь функцию 2 раза в раз расскажу с 0 или что тебе до нашей эры division рф


[06:14 - 06:32] это класс мы увидели стоковый представлении ошибки это просто и описаний и мы увидели аргументы с которыми мы создавали экземпляр класс то же самое верно и про тай который мы вывели когда передали в функции ф пустой лист он также хранит в себе сообщение в экстра класса представления не также хранит аргументы


[06:32 - 06:48] которые вы передали в конструктор класса тает когда ее вызывали может случиться и такое что мы не знаем какой конкретно тип ошибки может произойти в том коде который мы хотим исполнить и поэтому чаще всего считают что там должны происходить никаких ошибок в таком случае мы иногда можем захотеть исполнять


[06:48 - 07:05] блок без указания конкретных типов исключений которые нужно ловить для этого можем использовать пустой exit то есть ли в нашем и функции можно не указывать типы не указывать объекты показать вот такую вот except двоеточие


[07:05 - 07:23] любую ошибку которая произошла и кода мы опять в им сообщение если мы тогда поймали запустить убедимся в том что именно поймали ошибки ну и конечно не знаю какую ставить понять какими же механизмами мы пользуемся катаемся понять


[07:23 - 07:38] подходит исключение которое возникло внутри кода данный конкретный блок давайте для понимании еще сильнее упростим кот мы просто strike блоке запусти выделении 15 проверим ловили мы исключения р


[07:38 - 07:57] запускаем следующий год да убеждаемся в том что мы здесь мы совершаем деление на 0 вот здесь внутри блока try на самом деле генерируется объект исключения когда мы пытаемся разделить на 0 этого объекта нет имени однако вот где то у нас есть такой объект я пускаю на за вы я его не существует ни в каком из прайсе


[07:57 - 08:13] и что же происходит когда мы делаем акцент на самом деле проверять если бы всего 1 класс он проверяет из instantly я нашем случае the division р


[08:13 - 08:28] если это значение равно true то внутренние глока он заходит если же мы всегда вместе с тем больше значений больше типов content блока допустим раз и добавить фотки


[08:28 - 08:43] если можно сразу появляется несколько типов том для каждого из них проверяет и 1 из instance ли наш объект исключения каждому из этих типов если хотя бы для 1 из этих типов то он заходит внутрь александра блока


[08:43 - 09:01] закономерным вопросом является следующей а почему не используем сравнение типов через сайт а запускает функцию из инстанций дело в том что все ошибки языке python представляет собой иерархию и например division р наследоваться от класса арифметик эры то есть он является этнической ошибкой


[09:01 - 09:19] давайте сначала убедимся в том что задержан на чего то наследуется давайте выведем в терминал а наш порядок разрешения метода для себя родителей мы здесь видим собсно класса дорогая вижу арифметика р


[09:19 - 09:35] exception by the exception и конечно же обжиг в языке python ошибки не используют множественное наследование то есть я могу точно гарантирую что задержан настраивается только от арифметики арифметик только от exception exception только высококачественные без экзаменам только тот же


[09:35 - 09:51] так давайте поставлю сюда и вот сюда здесь я напишу что мы поймали на самом деле физической ошибку еще данный код конечно же мы понимаем арифметическую ошибку


[09:51 - 10:10] потому что деление на 0 также является и физической ошибкой именно поэтому мы используем этот язык для того чтобы определить попадаете данное исключение в конкретных с adblock так и для того чтобы понять какой из самых блоков мы выполняем мы пользуемся функцией из instance никогда не имеет смысла проверять наследника внутри 1 exit горы


[10:10 - 10:28] после прядка выкса блоке выше посмотрим если бы мы использовали здесь после арифметик еще 1 эксперт блок который бы содержал за все за division error и бросим вы либо заработаете


[10:28 - 10:43] сразу предупредил что мы пытаемся использовать наследника классы в css в блоке который следует после секса во всех медиа таким образом раз любое исключение может быть обработано лишь 1 блоком


[10:43 - 11:01] 2 блок целиком не нужен потому что все кнопочки ошибки мужа поймали выше в том числе все ошибки деления на 0 все что нам осталось узнать а try except блоке это речевых слова lsi finally ключевое слово используется тогда когда внутри try блока не возникло никакого исключения


[11:01 - 11:18] я уже тоже хотим что то сделать в этом случае а блок finally запускается в любом случае когда мы обработали исключение когда исключений не было даже когда есть такое исключение которым обработать не смогли в этом примере собирать все это воедино нас также есть функция девать которая пытается разделить икс на игрек


[11:18 - 11:35] записывай переменные result а мы ожидаем что если мы его поймаем то мы увидим сообщение division by tsar а если нас не будет такого исключения внутри мы увидим сообщение в терминал что результат данной операции и наш результат


[11:35 - 11:52] finally блока мы просто увидимся в файле и когда мы наш кот запустим убедимся в том что у нас все работает правильно сначала мы запустили его для значение 2 1 мы увидели что равен 2 и у нас выполнялся блок finally затем мы запросили у с аргументами 2 0


[11:52 - 12:11] мы убедились в том что мы поймали ошибку division базаров все запретили блок finally тогда мы пытаемся разделить его на лист мы здесь получили сайт который мы не смогли обработать сначала исполнился блок finally и затем нашу программу упала потому что мы никак не смогли обработать ошибку т р которая возникла при делении на лист


Step 4 (S-100257) 2.png

[12:11 - 12:21] таким образом языке python на съемочной гибкий набор инструментов для того чтобы мы могли контролировать исполнение нашей программы если у вас возникает ошибка у нас всегда есть возможность ее обработать