Уроки Python с нуля / #14 - Обработчик исключений. Конструкция «try - except»
При выполнении программы могут возникнуть различного рода ошибки (исключения). Нам необходимо уметь отслеживать подобные ошибки и предотвращать их. В ходе урока мы изучим конструкцию «try - except» для отлова и обработки исключений.
✅ Полезные ссылки:
- Урок на сайте itProger: itproger.com/course/python/14
⏰ Тайм коды:
00:00 - Начало
00:17 - Что такое исключение?
00:58 - Создание ошибки
02:00 - Обработчик исключения
04:03 - Практическое применение
06:03 - Разные ошибки
08:00 - Блок «finally»
09:05 - Блок «else»
09:40 - Заключительная часть
✔ Сообщество программистов: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life 🚀
Инстаграм itProger: / itproger_official
Группа FaceBook - goo.gl/XW0aaP
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Twitter - / goshadudar
- Уроки от #itProger 👨🏼💻
- Все уроки по хештегу #itprogerLessons
Пікірлер: 133
Очень интересная тема, ближе к финалу ощущаю себя программистом. Уже такие программы пишу, хоть и простые, но так приятно осозновать, что я могу это сделать, а не кто-то за меня. На данный момент учусь на судомеханика, попал по ошибке, в следующем семестре буду переводиться на программиста
Спасибо за урок! Очень жаль, что с каждым новым видео количество просмотров падает. Вы замечательный учитель! 🥰
print(‘СПАСИБО БОЛЬШОЕ’)
@M-ksim_YT
9 күн бұрын
word = "С" word2 = "П" word3 = "А" word4 = "С" word5 = "И" word6 = "Б" word7 = "О" print("word + word2 + word3 + word4 + word5 + word7")
Полезный урок, я до этого урока всегда использовал условия.Спасибо большое автору канала за такой полезный курс.
Очень интересно, продолжайте в том же духе!!!
Автор молодец. Быстро, понятно, чётко!
Спасибо за видос, очень качественное обучение
Очень хорошо и доступно подана информация. Спасибо.
Очень интересно, продолжайте в том же духе! Благодаря вам теперь я точно смогу доделать свой калькулятор))
Очень круто объяснил! Спасибо большое за видео! Подписался
Очень интересная тема!
Приятно, спасибо!
Это лучшие уроки python в русскоязычном KZread.
В try ... except не нужно засовывать всё. Нужно оборачивать только тот кусочек, ошибочность которого контролируем, и реакцию на который предусмотрели после except. Если засунуть слишком много, то может ошибка произойти где-то еще, а вместо сообщения об ошибке мы получим реакцию на другую ошибку. Например, тут мы контролирует только преобразование в целое, лучше и поместить между try и except только строку для ввода и преобразования, а вычисления и вывод результата поместить уже после try ... except , и даже вообще после цикла.
@makcim5425
Жыл бұрын
Спасён, ахах. Не могли бы вы посоветовать уроки питона, где нет таких ошибок? Благодарю за комментарии)
@olegkomlev
Жыл бұрын
@@makcim5425 На канале selfedu_rus неплохие уроки по питону для начинающих
@makcim5425
Жыл бұрын
@@olegkomlev спасибо
спасибо за урок!!!
За 14 уроков я начинаю что-то осознавать. Но не могу все знания совместить...
@comb1441
2 жыл бұрын
уже забросил это дело?
@chupepmunyan
Жыл бұрын
Если ещё изучаешь программирование, то советую конспектировать теорию и практику, которую ты записывал в редакторе.
@limonite8925
Жыл бұрын
@@chupepmunyan Я честно после окончания кода просто копировал код в редакторе и переносил в блокнот и подписывал названием ролика блокнот.
@ripiter4102
Жыл бұрын
Вот сейчас только начинаю учить и на основе прошлых видео написал можно сказать свою ос где можно манипулировать файлами
@gan_kongha8268
Жыл бұрын
Жиза😅
Стоит добавить в курс несколько чисто практических уроков, вроде создания парсера сайтов/калькулятора с gui/чего-то в этом духе
@artyr2944
Жыл бұрын
вот я посмотрел 14 роликов с данного гайда,смотрю ради изучение питона чтобы в дальнейшем написать себе парсер, вот за 14 роликов если вы конечно еще помните их, можно ли вообще будет написать парсер?
@ivnss1115
Жыл бұрын
@@artyr2944уже написал парсер?
@ivnss1115
Жыл бұрын
@@LUIS-ty8rn пон
@flexyyyapk
Жыл бұрын
я как посмотрел до 14,скажу что калькулятор я создал без всякой помощи,ну и пару меню на основе tycoon's,сложно,но возможно
Спасибо!
Спасибо за урок!
@FGamingFG
19 күн бұрын
2 года прошла с момента выхода ролика
спасибо!
Прикольно, когда я делала кулькулятор при деление на 0 он выдавал : "На 0 делить нельзя! " И я это сделала через простой if примерно так: a = int(input) b = int(input) if b != 0: print(a/b) else: print('на 0 делить нельзя')
@ivnss1115
Жыл бұрын
привет бро, чему то уже научился за одну неделю?)
@pelmeni_s_uksusom
Жыл бұрын
@@ivnss1115 прокрастинирую :')
@ivnss1115
Жыл бұрын
@@pelmeni_s_uksusom извини, но я не понял, можешь пожалуйста по подробнее объяснить?
@pelmeni_s_uksusom
Жыл бұрын
@@ivnss1115 страдаю фигнёй. Понятно? Я посмотрела все видео именно из этого курса. Хочу для начала сайт сделать, но вместо этого смотрю лололошку :)
@ivnss1115
Жыл бұрын
@@pelmeni_s_uksusom бывает, что бы тебе сайт создать, в соло будет сложно так как на пайтоне ты по большей степени только бэкенд сможешь написать, а для сайта тебе ещё дополнительно нужно изучить фронт енд, для визуализаций и стилией, и ещё желательно Java Scripts- для создания динамичности сайта
Спасибо
полезная конструкция
5:28 Можно также реализовать с помощью дефа: def calc(): try: x = int(input("Write a number: ")) x += 5 print(x) except ValueError: print("You better write a number.") calc() calc()
@Cau3e
Жыл бұрын
зачем усложнять)
@Cau3e
Жыл бұрын
@@xudueuzuru3714 понял, спасибо за ответ
@Swissjun
4 ай бұрын
Думаю что можно обойтись и без него. Каждый раз вызывать этот блок, будет муторно
Я в восторге от Вашего курса! Спасибо огромное за такой подарок всем нам! Предыдущую часть курса я проходил неспеша - со скоростью 1-2 урока в день. Но сейчас так интересно стало, и я прямо загорелся желанием скорее обучиться до уровня, на котором уже финансово реализовываться можно будет. Так что повышаю темп обучения - на сегодня планка 7-8 уроков. Напишу потом сколько успел пройти в итоге.
@user-qs1lt4ek8v
Жыл бұрын
Сколько уже посмотрел?
@user-mk1su9vd3w
Жыл бұрын
Как успехи?
@dmitry.masalskiy
Жыл бұрын
@@user-mk1su9vd3w курс прошёл со скоростью примерно 1 урок в день, теперь прохожу другой курс
А если пользователь введет -5, в итоге x станет == 0 и цикл не закончится. Наверно лучше счетчик делать отдельной переменной)
@dails6211
Жыл бұрын
Можно вот так x = 0 while True: try: x = int(input('Введите число: ')) x += 5 print(x) break except ValueError: print('Введите число')
Интересно, что преобразование int разрешает вводить _ внутри числа для разделения разрядов. Например, 1_000_000 В самой программе тоже можно так задавать числа. А вот незначащие нули ( например, 0000012 ) ошибки ValueError в int не вызовут, а в самой программе так нельзя: интерпретатор скажет , что лишние нули недопустимы, и посоветует использовать префикс "0o" для задания восьмиричных чисел.
СПАСИБО БРО ОГОРОМНОЕ ЗА ТРУД И ВКЛАД БЛАГОДАРЮЮ ОЧЕНЬ ПОМОГ ТЫ КЛАСС Я ЛЮБЛЮ ТЕБЯ БРО🤩😍😍😍😍😍😍🇦🇿🇦🇿😘😘😘♥️♥️♥️♥️♥️
Кому надо , можно улучшить первый код b = True a = ["Введите число: "] while b: try: a = int(input(a[0])) a += 5 print(a) b = False except ValueError: b = True a.pop(0) a.append("Введите число а не буквы!: ")
@ifuu-pc2kp
2 жыл бұрын
с break более гармонично что ли и проще читается while True: try: x = int(input("Введите число: ")) x += 5 print(x) break except ValueError: print("Это не число!")
@s.o.v.aproduction7010
2 жыл бұрын
@@ifuu-pc2kp согласен, читается лучше
@Axel-nk1yu
2 жыл бұрын
@@ifuu-pc2kp и так можно
@gdkor
2 жыл бұрын
Можно ведь было в input'e этот текст написать, а не создавать под него переменную, тем более список, в котором будет только этот текст, а затем зачем-то менять тип переменной на числовой
5:25 может лучше было создать другую переменную вместо x y например, просто если в другой программе такое допустить то могла возникнуть ошибка y = 0 while y == 0: и так далее
а зачем нужен else, если можно просто после всего, что в try было написать тот же print, и результат будет такой же?
Если ввести -5, то получится 0 и код ни о чем
В этом плане в c# гораздо проще, не надо знать никаких ошибок. Просто пишешь catch вместо except и все.
Я буду тут каждый день. День 9!
Топ
Спасибо.. Тема полностью не раскрыта,
спасибо тебе большое.
почемууу так мало лайков!!!!АЛЕЕЕЕ!!!! уроки топ!!!!!!! спасибо большое!
👍
А как для пользователя сделать чтобы нормально высчитывала, а если на ноль писала что нельзя. Понятно, что через input, но что то я не так делаю. У меня либо пишет на ноль нельзя при делении на любое число, либо выдаёт ошибку при делении на ноль
Не совсем понимаю, зачем нужен блок else, ведь по сути кодом, который выполнится при отсутствии исключений, будет код, который просто идёт следом за блоком обработки исключений. Например код: try: ... except: ... else: print("No exception") по сути аналогичен коду: try: ... except: ... print("No exception")
@Wireex
Жыл бұрын
Оно вывндет либо try или except а потом в конце а else предотвротит этт
А если я не знаю типа ошибки, except нельзя использовать без указания типа ошибки, а просто вывести сообщение о любой ошибке?
Не знаю зачем запариваться с циклом если его можно сделать просто бесконечным через While True и если программа выполнится написать break, так в разы проще и переменную заранее заполнять числом не нужно)
6:00 А если при вводе числа пользователь введет значение -5 то программа так же не закончит своё действие и будет продолжать работу
@DarkFTP
2 ай бұрын
искал этот комментарий)
2:55 Работаю в визуал студио, при включении программы всё равно выдаёт ошибку, хотя программа не останавливается
вопрос по части "Практическое применение" а если пользователь введет отрицательное число?
@Schwarz-zz4ew
Жыл бұрын
Все сработает, а вот если с плавающей точкой, то выдаст ошибку.
В примере с бесконечным циклом если пользователь введет -5, то программа попросит ввести ещё раз число))
5:15 пользователь который ввёл -5 🗿
такая программа тоже не плохая i = 0 while i try: a = int(input("Введите число: ")) a *= 2 print(a) i += 1 except ValueError: continue
Да в обработки ашыбак в C# Выдает Nall и ненада указавать род ошыбки
У нас в школе это называли "Защитой от дурака"
К сожалению, многое упущено во многих видео(
как ввести код что б если пользователь вводил не число, все очищалось? тип "Введите число" не шло на 3 строчку ну кароче кто понял тот понял
В учебнике по математике написано не ноль а нуль! 😯
4:38 - что делать, если пользователь ввел 0 ?
@user-qs1lt4ek8v
Жыл бұрын
В случае с x = int(input), лучше поменять x на другую переменную.
5:40 не легче юзать while True:
a = 0 b = 0 while a == 0 and b == 0: try: a = int(input('введите первое число: ')) x = input('введите знак: ') b = int(input('введите второе число: ')) if x == '+': print(a + b) elif x == '-': print(a - b) elif x == '*': print(a * b) elif x == '/': print(a / b) elif x == '^': print(a ** b) elif x != '+' or x != '-' or x != '*' or x != '/' or x != '^': print('такой операции нет') except ValueError: print('вы ввели не число!')
@kolazee
Жыл бұрын
там же можно просто else вписать
пользователь, который введет ноль удивится циклу
Почему обработчик исключений не срабатывает в таком коде: def greeting(lastname, username): print(f"Hi {username} {lastname}") try: greeting(lastname="Solovyov", "Vasya") except SyntaxError: print("Neych")
@Q_roxe
2 жыл бұрын
После lastname нужно два равно
@Q_roxe
2 жыл бұрын
И если указал чему будет равно lastname то наверно надо и username
@denvitprojects
2 жыл бұрын
Коду негде выдать исключение, вот и не вылетает ¯\_(ツ)_/¯
@olegkomlev
2 жыл бұрын
Обработчик исключений контролирует ошибки выполнения, а SyntaxError - ошибка синтаксиса. До выполнения еще не дошло, интерпретатор не выполняет команду, он еще не может ее понять. Ошибка том , что позиционные параметры должны указываться до именованных. lastname="Solovyov" - именованный параметр, "Vasya" - позиционный. Нужно или greeting("Solovyov", "Vasya") или greeting( username= "Vasya", lastname="Solovyov")
@nicholasspezza9449
2 жыл бұрын
Функция вызвана специально неправильно, чтоб появилась ошибка, которую должен поймать обработчик. И ошибка появляется (SyntaxError: positional argument follows keyword argument), но обработчик почему-то ее не отлавливает.
Кто знает как восстановить только что удаленную программу куда нажать а то я вообще. Чайник
А не проще ли проверять ввел пользователь число или символы? И через тот же цикл и условия говорим пользователю что он ввел какую то хню, а надо число, если условие на верно. Тогда никаких ошибок в самом коде не будет. И при этом мы сообщаем юзеру что он делает что то не так.
@lokrip4293
4 ай бұрын
Это долго
У меня почему то не работает это
улучшите код: uouo = True while uouo: try: kalkulator1 = float(input("Ваедите первое число:")) kalkulator2 = float(input("Введите второе число:")) kalkulator3 = input("введите знак: " ) if kalkulator3 == "+": print("Равняется...: " , kalkulator1 + kalkulator2) elif kalkulator3 == "-": print("Равняется...: " , kalkulator1 - kalkulator2) elif kalkulator3 == "*": print("Равняется...: " , kalkulator1 * kalkulator2) elif kalkulator3 == "/": print("Равняется...: " , kalkulator1 / kalkulator2) except ValueError: print("Введите лучше чилсло!!")
@denvitprojects
2 жыл бұрын
Замечания: 1. У переменных должно быть описывающее название, а также не желательно использовать транслит (написание русских слов латинскими буквами). При решении мат. задач или использовании временных переменных название может состоять из одной буквы. uouo лучше заменить на что-то более понятное, типа loop или run. Ещё можно буквой. kalkulatorN во-первых транслит, во-вторых плохо описывает суть переменной. 2. Для простых вычислений наподобие тех, на которые рассчитан этот калькулятор, хорошо подходит ф-ция eval(). Проще говоря, она из строки извлекает какое-либо выражение или ф-цию на языке и с ходу её выполняет. Из-за последнего, кстати, eval() может быть опасной в неумелых руках. Если функцию не нужно выполнять сразу, то лучше использовать literal_eval() из модуля ast. 3. От огромных цепей условий у тебя будет рябить в глазах, если будешь пытаться прочитать свой код уже через несколько месяцев. Уж поверь мне, я писал такой говнокод, а потом разгребал. Совсем от условий отказываться не надо, но в подобных случаях с длинными цепями лучше найти другой выход. И в большинстве случаев он находится! 4. Это, наверное, здесь главная проблема. Циклу... негде завершиться. Он бесконечный! Это можно решить двумя способами. Первый - задать значение False переменной uouo/loop либо в блоке else, либо в конце блока try. Второй - использовать ключевое слово break для остановки цикла, в тех же местах кода. Но в этом случае от переменной uouo/loop можно избавиться, а первой строкой цикла сделать while True:. Я лично выберу второй способ, а так без разницы. 5. Это личное предпочтение для более новых версий Python - f-строки. Ставишь f перед кавычками, в строку - фигурные скобки, в фигурные скобки - переменную, которую надо вставить в строку. Пример использования будет в моём коде А вот и сам пример кода, написанный на основе вышесказанных замечаний: while True: try: num1 = float(input("Введите первое число: ")) num2 = float(input("Введите второе число: ")) sign = input("Введите знак: ") print(f"{num1} {sign} {num2} =", eval(f"{num1} {sign} {num2}")) except ValueError: print("Введите лучше число!") # если одно из чисел не того типа except SyntaxError: print("Введите один из знаков +, -, *, /, %, **!") # если со знаком нельзя выполнить вычислений else: break P.S. Это только часть советов, которые помогут улучшить код. Их уже познают за счёт просмотра и анализа кода (как своего, так и чужого), советов от более бывалых программистов, практики и опытности в целом. Я сам это нарабатывал месяцами, а курс прохожу, чтобы восполнить свои отрывочные знания языка (я даже лямбду и множества наконец освоил буквально вчера). А так делюсь, чем могу. Надеюсь, поможет кому-то в дальнейшем. P.P.S Писал с уклоном на то, что этот код и комментарий писал новичок в программировании. Мб меня тупо проверяли, но насчёт этого не уверен. Upd: понятнее описал f-строки, заглянул в словарь синонимов и избавился от тавтологий
@hikkifun951
2 жыл бұрын
@@denvitprojects @DenVit Projects да, я действительно новичок, занимаюсь ток дней 28,с момента написания этого калькулятора прошло уже 10 дней, так что никто тебя не проверяет, пххмхм. По твоему комментарию я в принципе понял свои ошибки которые сделал при написании моего говно кода :) Собственно спасибо что на ошибки указал, в следующий раз буду знать)
@denvitprojects
2 жыл бұрын
@@hikkifun951 Тебе тоже спасибо, что так здраво воспринял критику в свой адрес. Приятно, всё-таки, что я своим опытом смог кому-то помочь. Ну, удачи там, и поменьше нечитабельного кода))
@denvitprojects
2 жыл бұрын
@@hikkifun951 На счёт опыта, свою неопытность я понял, когда читал код своей игры, на PyGame, которую за 4 дня написал для новогоднего огонька в своём классе (я семиклассник). В процессе анализа нашлась тонна ошибок, из-за которых код было трудно прочитать и понять. Среди них были и странные названия переменных, и цепи по 8 условий, которые я в процессе анализа переписал в итератор на 4 строки, и отсутствие разбиения на функции (это тоже, кстати, помогает читабельности), и прочие ошибки, совершённые по неопытности. Но такой глубокий анализ помогает исправить ошибки прошлого и на контрастах показывает рост навыка программиста. Так что я советую изредка обозревать свои старые работы, искать в них изъяны и поправлять их. А ещё лучше: завести свой GitHub, где код могут обозревать другие и, возможно, даже оставлять комментарии, а также подружиться с системой контроля версий. К слову, мне бы это тоже не помешало) P.S Сорян, привычка писать долгие комментарии
Почему else - элса?? Else - элс. Слух режет.
а когда мы научимся создать сайты или игры на питоне????
@TheAndroid228
2 жыл бұрын
на канале есть плейлист по джанго
с каждым видео все меньше и меньше просмотров))
Примечание: Блоки else и finally практически безполезные
Здравствуйте мне 16 лет и я создал телеграмм канал, где показываю с какими трудностями я сталкиваюсь при изучении языков программирования с нуля. Также объясняю, как решать эти проблемы. К каналу есть чат, где я отвечаю на интересующие вас вопросы, если заинтересовало заходи на мой канал там ссылка на тг🔥