Уроки Python для начинающих | #13 - Исключения (Конструкция try - except)
Урок на сайте itProger: itproger.com/course/python/13
В этом уроке мы рассмотрим исключения в языке Python. Мы рассмотрим такую конструкцию как try except, а также дополнительно finally и оператор else для исключений.
✔ Основной сайт: itproger.com/
✔ -------------
Вступай в группу Вк - prog_life
Группа FaceBook - goo.gl/XW0aaP
Instagram: / gosha_dudar
Telegram: t.me/itProger_official
Страничка Twitter - / goshadudar
- Уроки от #GoshaDudar 👨🏼💻
- Все уроки по хештегу #GoshaPython
Пікірлер: 140
Тут Гоша объяснил более понятно, чем на прошлом уроке
Хороший пример применения, где видна полезность данной конструкции.
уроки питона - это единственное, чего не хватало твоему каналу
УРАААААА Всегда смотрю тебя!
Сделай урок по графическим приложения на python
@megapro1725
6 жыл бұрын
Pyqt загугли
@deoni
5 жыл бұрын
Kivy, PyQt, Tkinter, Pygame
@andriiprysiazhnyi130
5 жыл бұрын
@@deoni , turtle
@poghostt
4 жыл бұрын
А можно не на татарском?
@kitoboynaya
Жыл бұрын
Ребят, посмотрите видосы. Буду рад!
cпс за урок очень полезно
Гоша сделай обзор движков. К примеру source
в первом примере нужно на этапе ввода чисел отслеживать ошибку, если там ввести слово то будет ошибка. Спасибо за уроки.
полезно
Добрый день! А можешь объяснить пожалуйста: как идентифицировать ошибку и исключение? В каком случае ошибка является исключением?
я купил книжку, и прочитал ее, но понял что надо еще раз перечитать потому что половина было не понятно но, наткнулся на тебя посмотрел все 21 уроков и все прекрасно понял, спасибо тебе!!!!!
@user-ch7zi1di1j
Жыл бұрын
что за книжка, если не секрет?
@m_i_r_k
Жыл бұрын
@@user-ch7zi1di1j похоже, все так и секрет...
На 4:40 если не обнулить res, то при попытке print(res) будет возникать совсем другая ошибка, а именно NameError: name 'res' is not defined поскольку объявления переменной res было прервано возникновением ZeroDivisionError
Оцените пожалуйста print (str('Добро пожаловать в программу "вечный калькулятор"')) while True: ask = input(str('Введите, какую операцию вы хотите сделать (+, -, *, /): ')) #ОПЕРАЦИЯ СЛОЖЕНИЯ if str (ask) == str ('+'): try: x = float (input ('x = ')) except ValueError: print ('Вы ввели не число') x = 0 try: y = float (input ('y = ')) except ValueError: print ('Вы ввели не число(') y = 0 res1 = x + y print ('x + y = ' + str(res1)) #ОПЕРАЦИЯ ВЫЧИТАНИЯ elif str (ask) == str ('-'): try: x = float (input ('x = ')) except ValueError: print ('Вы ввели не число') x = 0 try: y = float (input ('y = ')) except ValueError: print ('Вы ввели не число(') y = 0 res2 = x - y print ('x - y = ' + str(res2)) #ОПЕРАЦИЯ УМНОЖЕНИЯ elif str (ask) == str ('*'): try: x = float (input ('x = ')) except ValueError: print ('Вы ввели не число') x = 0 try: y = float (input ('y = ')) except ValueError: print ('Вы ввели не число(') y = 0 res3 = x * y print ('x * y = ' + str(res3)) #ОПЕРАЦИЯ ДЕЛЕНИЯ elif str (ask) == str ('/'): try: x = float (input ('x = ')) except ValueError: print ('Вы ввели не число') x = 0 try: y = float (input ('y = ')) except ValueError: print ('Вы ввели не число(') y = 0 try: res4 = x / y except ZeroDivisionError: print ('Вы ввели 0(') res4 = 0 print ('x / y = ' + str(res4)) else: print ('Вы ввели неправильную операцию')
@mashalka1638
4 жыл бұрын
нафига
@user-es4dw6up6q
4 жыл бұрын
@@mashalka1638 , а главное зачем
@jurassicgames2160
3 жыл бұрын
Можно не просить по 100 раз ввести числа, а просто один раз попросить числа и дальше делать всё то, что надо пользователю. Это здорово сократит размер программы
@Alexey_Ivanov828
2 жыл бұрын
Тут куча ненужной фигни
@kitoboynaya
Жыл бұрын
Ребят, посмотрите видосы. Буду рад!
Уроки для новичков, однако не было сказано ничего об: assert и raise в сочетании с try except
Спасибо за уроки интересные, не только по Python, но мне немного резануло, что поделить на ноль, будет ноль. Если поделить на ноль будет бесконечность. Не в упрек, а в добро!!!
@matigreen6874
6 жыл бұрын
*неопределенность
@Trapeciya
3 жыл бұрын
Числа ноль не существует. Кто это придумал? Какой то идиот.
pythonworld.ru/tipy-dannyx-v-python/isklyucheniya-v-python-konstrukciya-try-except-dlya-obrabotki-isklyuchenij.html - вот это самоучитель
Конструкцию else можно переводить как: Нету ошибки>Иначе>Выводится print
Привет, подскажи плз, как ты массово закомментироваешь? Спасибо большое за уроки.
@ntbgaming5630
4 жыл бұрын
в sublime text ctrl+/
Почему не показал пример и предупреждения об ошибку TypeError как и с остальными двумя ошибками? Как теперь это найти вообще, чтобы на TypeError тоже было корректное сообщение ?
Подскажите, пожалуйста, как вернуть пользователя на начало кода (на ввод значений). Например, он повторно ввёл непрпавильное значение.
@kmelekesov
6 жыл бұрын
Используй циклы
@Amigun_yo
5 жыл бұрын
while
А можно сделать сразу несколько except?
не слушай идиотов, хороший урок.
спасибо
забыл рассказать что блоков except может быть любое количество и в одном блоке except можно перечислять несколько ошибок
@user-lz8fg9rc9k
3 жыл бұрын
Тоесть после try может быть несколько except? Как в одном except перечислять ошибки, через конструкцию or?
@jojo2620
3 жыл бұрын
@@user-lz8fg9rc9k try: тело except (ValueError, TypeError): .....
В пайтоне очень не хватает команды goto для обработки исключений. Как просто и естественно было бы заставлять пользователя заново вводить данные не загоняя весь трай в цикл, а заставляя поменять только некорректно введённое значение.
@dimaskrypka4997
5 жыл бұрын
goto может и удобно но не читабельно
Traceback (most recent call last): File "", line 1, in NameError: name 'y' is not defined (Это в пайчарме, что делать почему ошибка точно также написал?)
@diesoidonthearyou2491
4 жыл бұрын
Слушай, тоже работаю в Пайчарме, но никаких ошибок, держи код: try: x = int(input("Введите первое число: ")) except ValueError: print("Ты ввел не число! Теперь это будет единица!") x = 1 try: y = int(input("Введите второе число: ")) except ValueError: print("Ты ввел не число! Теперь это будет единица!") y = 1 try: res = x / y except ZeroDivisionError: print("Ты на ноль поделил, дурачек!") print(res)
@monukmort
4 жыл бұрын
В пайчарме пишу все то же самое, но выдает ошибку... Либо я тупой, либо лыжи не едут ))) P.s. скорее всего второй вариант )))
Как ты разом все закомментировал? Скажи пожалуйста
@anastasiarozhdestvenskaya1199
4 жыл бұрын
Ctrl+Shift+/
try: a = int (input ()) b = int (input()) res = a/b except ValueError: res = "you enter not num" except ZeroDivisionError: res = "you enter 0" else: print ("All is okay") finally: print ("Completed") print (res) полностью одно и тоже что и у Вас, только не обнулял переменную res
@mediafile9995
3 жыл бұрын
Прикольно и лаконично...
3:11 , "Но если будет ноль !!!"
Добрый день! В Sublime не работает ф-я "input". Возможно выполнить только в IDLE.
@pechkurofff
5 жыл бұрын
Я через sublime text 3 все коды пишу, и все работает.
@sunset-ts3ol
5 жыл бұрын
работает все, просто ты наверно неправильно делаешь, скинь мне код свой где именно не работает input
Можно было просто res и x после ошибки задавать значения: Вы ввели 0 и Вы ввели не число тогда бы это принтилось и не было бы 0 лишнего
а во сколько уроков планируете уложиться ?, примерно :)
@74x
5 жыл бұрын
он уложился в 21 с хером урок
А как в цикле с несколькими условиями выполнить несколько исключений?
Немного изменил: try: x = int(input()) except ValueError: print ('Вы ввели не число') else: print ('Все верно') try: y = int(input()) except ValueError: print ('Вы ввели не число') else: print ('Все верно') finally: print('выполнится 100%') try: try: res = x / y except TypeError: print('Один из аргументов не является числом') res = 'NaN' else: print (res) except ZeroDivisionError: print ('На ноль делить тельзя') print ('NaN')
В конце у тебя ошибка по-моему, если поделить на ноль, строка с 'else' также будет выводиться на экран, поправьте если я ошибся.
@borisbritva243
3 жыл бұрын
try: x = int(input('Enter the first number ')) except ValueError: print('Not a number') x = 0 try: y = int(input('Enter the second number ')) except ValueError: print('Not a number') y = 0 try: result = x / y print(result) except ZeroDivisionError: print("Cant be devided by zero!") result = 0 else: print("Everything is fine") finally: print("Will be written always")
@borisbritva243
3 жыл бұрын
Вот так вроде правильно все работает
У меня не компилируется res = 0
Как сразу закоментироавал?
мудрость прогерства - чтобы отловить ошибку, надо создать ошибку, а дальше действеушь с теми данными, которые ты получил
Почему команда else: выполняется даже если я вместо одного числа ввёл букву?
@diesoidonthearyou2491
4 жыл бұрын
Чееел, та же самая проблема только, что была! Крч... Это не условный оператор по типу if, тут break поставить нельзя, следовательно после того, как ты ввел except ValueError: print("Вы ввели не число") нужно так же обязательно присвоить переменной численное значение, то-есть ввести y = 1 или y = 0, но чтобы не вывело следующую ошибку под названием ZeroDivisionError лучше все таки единичку присвоить)
я 3
А вот Matlab в отличии от Python умеет делить на ноль без никаких исключений 😉
@ligeia8976
4 жыл бұрын
никто не умеет, а matlab умеет интересно
5:01 как ты сразу закомментировал несколько строк?
@dimazahaiko1803
3 жыл бұрын
В PyCharm: выделить строки и нажать Ctrl+/
после try можно несколько строк писать?
@vitkovskiy1595
3 жыл бұрын
Да
В чем отличие от проверок if-else? Я же это все могу и в if-else сделать
забыл рассказать как создавать свои исключения и как рейзить
В чем смысл finally? Его ведь можно опустить .
@user-vp1np4je5m
3 жыл бұрын
Типо приколюшка
как ты все за комментировал?
@johnnycash6745
5 жыл бұрын
Подскажите как это можно сделать на windows? ctrl+4, ctrl+/ не работает
@Amigun_yo
5 жыл бұрын
@@johnnycash6745 *ctrl+/* _(/ - это знак на точке(, если зажать shift)), если русская раскладка. А если английская раскладка то там где / (? если зажать shift). Эта точка находится слева от правого шифта_
@johnnycash6745
5 жыл бұрын
@@Amigun_yo thanks a lot! I will try it
@mediafile9995
3 жыл бұрын
@@Amigun_yo спс тебе!!!
@kitoboynaya
Жыл бұрын
Ребят, посмотрите видосы. Буду рад!
Так легче try: x = int(input("Введите число:")) y = int(input("Введите число:")) s = x / y print(s) except ZeroDivisionError: print("Вы ввели 0") except ValueError: print("Вы ввели не число")
@CALINws
6 жыл бұрын
у тебя ошибку выдаст при попытке ввода буквы а не числа
@leeeass840
5 жыл бұрын
@@CALINws не выдаст, всё правильно
@2012Chauncey
5 жыл бұрын
А еще легче :) try: x=float(input("Введите число:")) y=float(input("Введите число:")) s=x/y except: print("Ты что-то сделал не так") else: print(s) finally: print("Ну, я сделал все, что мог")
@demydteslenko1166
5 жыл бұрын
@@2012Chauncey Это не проще, а более НЕПРАВИЛЬНО. Всегда, во избежании недопониманий, нужно указывать тип ошибки в except.
@kitoboynaya
Жыл бұрын
Ребят, посмотрите видосы. Буду рад!
почему выдаёт эту ошибку в IDLE? =============== RESTART: C:\Users\hp\Desktop\RUBBISH\python.py ===============
Python: 2:06 JavaScript: да?
Актуально еще? На 2020 -2021 год?
@gosha_dudar
3 жыл бұрын
Конечно же 😌
def list_find(): a = list(input('enter list')) b = input('enter value') try: a.index(b) except ValueError: print('Value is not in list') else: print('value index is: ', a.index(b))
зачем нужен else, если можно просто продолжить код в блоке try
Можно не много улучшить код добавив цикл while
@azm1397
4 жыл бұрын
почти любой код можно while улучшить!
Не знаю почему, но я реализовал защиту от дурака) print('Программа для вычисления степений числа.') print() while True: try: num = int(input('Введите целое число: ')) n = int(input('Введите степень числа (целое число): ')) except ValueError: print('Было введено не целое или целые числа. Попбробуйте ввод ещё раз!') else: break print('Будет найдено: число', num, 'в', n, 'степени.') print() for i in range(n + 1): print('Степень:', i, '=', num ** i)
Никто: Абсолютно никто: Я уже джун и пишу оконные приложения на питоне. новички: 1:38
what = input("Что делаем? (+,-,/,*,**,%,//)") a = float(input("Введите превое число:")) b = float(input("Введите второе число:")) if what == "+": l = a + b elif what == "-": l = a - b elif what == "*": l = a * b elif what == "/": l = a / b elif what == "**": l = a ** b elif what == "%": l = a % b elif what == "//": l = a // b try: l = a / b except ZeroDivisionError: l = 0 print("Результат:" + str(l)) Что здесь не так? При делении на ноль выдаёт ошибку : ZeroDivisionError
Есть команда os.listdir('Путь'), но если написать например C:\Program Files\CCleaner\CCleaner.exe то будет ошибка, но try - except выведет этому тупому юзеру что путь неверный. И прога не будет крошится как хлеб.
если делить на 0 будет бесконечность
4:40 абсолютное непонимание того, как это работает. Прежде чем заявлять такое, хоть проверил бы сначала.
from colorama import * init() print( Back.WHITE + Fore.BLACK +'Деление чисел' ) try: x = int(input('Введіть перше число: ')) except (ValueError,): print(Back.RED + Fore.BLACK + "Вы ввели не число") x = 0 exit() try: y = int(input( 'Введите второе число: ')) except ValueError: print(Back.RED + Fore.BLACK +"Вы ввели не число") y = 0 exit() try: res = x/y except ZeroDivisionError: res = print(Back.RED + Fore.BLACK +'Вы ввели 0 ') exit() print(Back.GREEN + Fore.BLACK + 'Результат: ', res)
@kirillusenko
4 жыл бұрын
Ну и? P.S что бы по 1000 раз не писать Fore.RED и Back.WHITE просто напиши в начале print(Fore.RED, Back.WHITE) И не придётся писать по 100 раз.
@victor-zz6xn
4 жыл бұрын
@@kirillusenkoДа, согласен, 1 год коментарию, ваай :\
помогите пж тут ошибка NameError: elif app==2: gg=="Ножницы" elif app==3: gg=="Бумага" print("1) Камень") print("2) Ножницы") print("1) Бумага") try: pass except Exception as e: raise e w=int(input("Ваш выбор:" )) if w==1: print("***************") print("Ваш выбор: Камень") print("Выбор оппонента:" + str(gg)) print("***************") if app==1: print("-Ничья-") elif app==2: print("Вы победили Соперник проиграл") else: print("Вы проиграли Соперник выиграл") if w==2: print("***************") print("Ваш выбор: Ножницы") print("Выбор оппонента:" + str(gg)) print("***************") if app==1: print("Вы проиграли Соперник выиграл") elif app==2: print("-Ничья-") else: print("Вы победили Соперник проиграл") if w==3: print("***************") print("Ваш выбор: Бумага") print("Выбор оппонента:" + str(gg)) print("***************") if app==1: print("Вы победили Соперник проиграл") elif app==2: print("Вы проиграли Соперник выиграл") else: print("-Ничья-")
@kirillusenko
4 жыл бұрын
Не надо пожалуйста ИЗДЕВАТЬСЯ НАД ЛЮДЬМИ КОТОРЫЕ ХОТЯТ ТЕБЕ ПОМОЧЬ! Хотя бы в какой строке, блин, написал бы.
Удивлен что нет подобного комментария, если 'х' записать в виде строки, выдастся ошибка, но программа не останавливается, следовательно, мне нужно ввести 'у', я его ввожу в виде числа, но при этом происходит ошибка, ведь я не указал 'х'. В ролике об этом ничего нет, в комментах тоже.
@legion1660
4 жыл бұрын
Завершить программу можно при помощи exit(), просто вписываем это с новой строки; автор не объяснил такую элементарщину, найс обучение
@diesoidonthearyou2491
4 жыл бұрын
@@legion1660 Огромное спасибо, а то я дурачек начал break'ать все это дело)
@legion1660
4 жыл бұрын
@@diesoidonthearyou2491 то же самое было)
@kitoboynaya
Жыл бұрын
Ребят, посмотрите видосы. Буду рад!
Не понятно, зачем вобще нужен блок finally, можно же просто вне всяких блоков код написать и он всегда выполниться
@shprotos4724
5 жыл бұрын
а, я понял - если появится не та ошибка, которую мы ловили
@sentex613
4 жыл бұрын
Спустя 7 месяцев отвечу, что это очень удобно для работы с файлами. Какой-бы ерор не вылетел, мы в любом случае закроем файл
x = int(input()) y = int(input()) try: res = x / y except ZeroDivisionError: res = 'На ноль делить нельзя, дурачок!' print(res)
Я ПЕРВЫЙ!!!!!!!!!
Я не знаю, я как не пробовал у меня не работает...
@sambo-mambo
3 жыл бұрын
У тебя мозг не работает :D
10 минутный урок раз в день ничего вам не даст, читайте книги, смотрите другие видео...
@riddle8719
7 жыл бұрын
Дмитрий Шевченко он даст основы. А книги,как правило,для продвинутого изучения(ООП,GUI,всякие графические библиотеки). Конечно, есть книги типа "Python для чайников", но я считаю, что лучше сначала посмотреть видеоуроки,а потом уже читать книги.
@user-hq6zf8kz5q
7 жыл бұрын
Много чего понял за 13 уроков в которых по 1-2 примера?
@user-fn8lj2nb5z
7 жыл бұрын
Я - да.
@Voron_kor
6 жыл бұрын
довольно много , т.к. знаю с++ и с#
@heathcliff2175
6 жыл бұрын
Лол,будешь учить,что надо,а что нет? Просто тебя даже не спрашивали,кэп
Else роизносится как "элс", а не "элсэ"((
Вы, сударь, сначала бы питон выучили, а потом лезли преподавать. ZeroDivision это не название, а КЛАСС исключения, базовым для которого является класс Exception. И конструкция не try: exception: а try: except:
@Stich7777777777
2 жыл бұрын
Ну так записывай свои уроки, идеалист. Или что, он занял единственную вакансию на ютубе?
говнокод какой-то