Принцип EAFP в Python, работа с исключениями в Python. Применение принципов Zen of Python

Поділитися
Вставка
  • Опубліковано 4 жов 2024
  • Мой курс «Хардкорная веб-разработка» - course.to.digital
    Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.dig...
    Telegram: t0digital.t.me
    Сказать спасибо за это видео можно здесь - boosty.to/digi...
    EAFP - важный принцип, позволяющий писать более «pythonic» код. EAFP расшифровывается как Easier to ask for forgiveness than permission, а его антипод LBYL - Look before you leap. Поговорим о разнице и о том, почему именно EAFP выбран разработчиками Python как правильный способ проектирования приложений.
    /****************** about ******************/
    Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
    - Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
    - Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
    Если у вас есть проект на разработку, пишите нам на hi@digitalize.team.
    С другими предложениями, а также если вам нужна одна или несколько индивидуальных консультаций/уроков по разработке (3000 руб/час), пишите мне на alexey@salesbeat.pro.
    Telegram канал - t.me/t0digital
    ВК - digital...
    RuTube - rutube.ru/chan...
    Дзен - dzen.ru/id/623...

КОМЕНТАРІ • 196

  • @mrhayden992
    @mrhayden992 4 роки тому +129

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

    • @rishatsharafiev
      @rishatsharafiev 4 роки тому +5

      starlette и fastapi интереснее

    • @КириллКириллович
      @КириллКириллович 4 роки тому +11

      @@rishatsharafiev aiohttp и asyncio интереснее

    • @Uni-Coder
      @Uni-Coder 4 роки тому

      @@rishatsharafiev Асинхрон - концепт современного кодинга, это прям надо. Это есть в C++, C#, Python, Rust и вообще везде (правда, Java немного страдает), это надо изучать не только питоноидам.

    • @MegaFeel1
      @MegaFeel1 4 роки тому

      А мне бы Sanic, сколько людей столько мнений))

    • @cashncarry8
      @cashncarry8 4 роки тому

      @@MegaFeel1 хорошо, что фреймворков меньше))

  • @kalik54
    @kalik54 4 роки тому +86

    Наверное самый полезный канал по пайтону на русскоязычном ютубе

    • @t0digital
      @t0digital  4 роки тому +4

      Спасибооо!

    • @ИванИванов-н9т9ъ
      @ИванИванов-н9т9ъ 4 роки тому +8

      Ещё Олег Молчанов неплохо объяснял (давно у него роликов не было). И автор этого канала, на котором мы сейчас, безусловно - молодец!

    • @kalik54
      @kalik54 4 роки тому +3

      @@ИванИванов-н9т9ъ Да, как раз когда писал, Олег был на уме как и диджитализируй)

    • @ИванИванов-н9т9ъ
      @ИванИванов-н9т9ъ 4 роки тому +2

      @@kalik54 Да, эти товарищи вносят существенный вклад в развитие python-сообщества в России и русскоговорящих странах.

    • @govdamikhaylo4183
      @govdamikhaylo4183 4 роки тому

      @@ИванИванов-н9т9ъ +. скорее он бы вернулся(

  • @Константин-й1ъ6я
    @Константин-й1ъ6я 2 роки тому +1

    классно, что говоришь быстро, не нужно ускорять видео)))

  • @MartinEden-ps6ld
    @MartinEden-ps6ld 3 роки тому +1

    блин, это один из лучших каналов по программированию, от души за все советы))

  • @driewtonmai
    @driewtonmai 4 роки тому +11

    Спасибо за контент Алексей. Мне нравится, что вы уделяете внимание картинке и звуку.
    Предлагаю снять ролик о том, как дебажить на пайчарме. Было бы интересно.

  • @rumartru
    @rumartru 4 роки тому +2

    Спасибо! Лайк! От других программистов слышал обратное, try/except использовать если по-другому нельзя, т.к. дорогая операция. Хотя тесты которые я видел показывали, что дорогой становится при частой ловле исключений.

    • @t0digital
      @t0digital  4 роки тому +3

      Try/except дешёвый, если не генерится исключение, а генериться оно должно редко, это ведь исключительная ситуация

  • @Geolimber
    @Geolimber 4 роки тому +4

    Шикарный выпуск. Такие ньюансы очень полезны. Даёшь больше best practice примеров из Python и Django!

  • @Smarandii
    @Smarandii 4 роки тому +4

    Продвигаем годноту в массы

  • @chilisten
    @chilisten 4 роки тому +2

    Алексей, спасибо большое за вашу работу.
    Просто и понятно!

  • @TarTarus
    @TarTarus 4 роки тому +2

    Добрый Комент!

  • @filipfilip4184
    @filipfilip4184 2 роки тому

    Приятно слушать, смотреть и учиться. И все без воды. Спасибо!

  • @bistronousogust
    @bistronousogust 4 роки тому +5

    "Да прибудет с вами сила" - это уже устраешая фраза. Надо говорить: "Таков путь!" ;)
    Спасибо за кусочек питонячей дисциплины.

  • @makediffdev
    @makediffdev 4 роки тому

    Отличный контент. Круто прогрессировал последнее время

    • @t0digital
      @t0digital  4 роки тому

      Спасибо! А что бы вы отметили, что за последнее время стало лучше на ваш взгяд? Темы видео, подача, картинка, звук, ещё что-то? Полезно будет знать.
      Спасибо!

  • @toomanof
    @toomanof 4 роки тому

    Лаконично и доступно! Пять балов за изложение мысли!

  • @eldorpulatov566
    @eldorpulatov566 4 роки тому

    Спасибо за Python контент!

    • @t0digital
      @t0digital  4 роки тому

      Рад, что полезно:)

  • @tihon4979
    @tihon4979 10 місяців тому

    Огонь! Полностью согласен!!!

  • @swimmwatch
    @swimmwatch 4 роки тому +1

    Лайк однозначно! Качество контента растёт на глазах!

  • @arthurkeller3119
    @arthurkeller3119 4 роки тому

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

  • @vyacheslavgvorus3883
    @vyacheslavgvorus3883 4 роки тому +1

    Круто и очень полезно! Дьявол скрывается в деталях)

  • @markervictor
    @markervictor 4 роки тому

    Пару дней назад нашел ваш канал и уже пересмотрел больше половины видео. Рассказывает обо всем очень доступно и интересно! Из тех, что попадались на русском UA-cam, наверно, первый канал, который не рассчитан на абсолютно начинающих и не рассказывает, как "Выучить Python за час" или что-то из этой серии. Удачи в развитии!

  • @z0uRChannel
    @z0uRChannel 4 роки тому

    Просто и грамотно. Пасиб

  • @copycat774
    @copycat774 4 роки тому

    Неоднократно задавался вопросом, использовать условия или исключения. А, оказывается, все так просто. Теперь смогу сделать свой код лучше. Благодарю.

  • @ВладКалошин-о4б
    @ВладКалошин-о4б 4 роки тому

    Полезное видео. Больше подобных)

  • @МаксимЗиновьев-т5л
    @МаксимЗиновьев-т5л 4 роки тому +2

    Как интересно, а я всеми силами старался избежать try except, приму к сведению, спасибо.

    • @Кантригоспел
      @Кантригоспел 4 роки тому

      Я так же)

    • @MA-channel1
      @MA-channel1 4 роки тому

      Оно тоже затуманивает логику как и if на каждом шагу. Если except на каждом шагу то это не лучше а даже медленнее
      А если не на каждом шагу проверка нужна то можно и без if'а, и без локальных except (только большой "всё-ловящий" try/except)

  • @ЕгорМитрофанов-г7ъ

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

  • @andreymishuk2188
    @andreymishuk2188 4 роки тому

    суперская подача инфы, больше видео как надо и как не надо !)))

  • @KHANZE
    @KHANZE 4 роки тому

    Спасибо мужик!
    У тебя много что узнаю. Только уважение к тебе.

  • @mmohelp
    @mmohelp 4 роки тому +1

    Спасибо ,как всегда огонь инфа!

  • @ОлегК-б2ю
    @ОлегК-б2ю 4 роки тому +2

    Хороший ролик, спасибо :)

  • @eugeneburdin704
    @eugeneburdin704 4 роки тому

    Спасибо за выпуск. Хорошо прояснил официальные подходы !) Круто!

  • @sulfur32066
    @sulfur32066 4 роки тому +16

    Можно ли еще видео как до этого было, часовое по django, очень зашел формат, только по django REST)

  • @peronium_
    @peronium_ 4 роки тому

    Круто снял!

  • @balabunat
    @balabunat 4 роки тому

    Очень давно так делаю, теперь просто знаю как это называется )))
    Спасибо за контент!

  • @russianstan
    @russianstan 4 роки тому

    Алексей, круто! Спасибо большое) Очень бы хотелось побольше подобных видео о лучших практиках

  • @21138532110q
    @21138532110q 4 роки тому +3

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

    • @SourPassionParty
      @SourPassionParty Рік тому +3

      Да чем всех dict.get( ) не устраивает?

  • @nik-ix2md
    @nik-ix2md 4 роки тому

    Как всегда отличное и полезное объяснение по делу! Спасибо!

  • @uszr1
    @uszr1 4 роки тому

    Спасибо! Как всегда отличная подача и полезная информация!

  • @СергейНовожилов-я6я

    Очень полезное видео! Спасибо!

  • @BagsySigel
    @BagsySigel 4 роки тому

    Полезная инфа

  • @sw1881
    @sw1881 4 роки тому

    Добрый коммент=)

  • @bpospanov
    @bpospanov 4 роки тому

    офигенное видео, спасибо!

  • @azamatmuratshin
    @azamatmuratshin 4 роки тому

    Спасибо за контент! Нужно скинуть в чаи группы, им должно понравиться)

  • @tahirjalilov
    @tahirjalilov 4 роки тому

    Блин, почти не использовал try/except в своем коде, везде пихал if/else. А после этого видео, буду писать правильно. Спасибо!!!

  • @ivanshvedov1823
    @ivanshvedov1823 4 роки тому +11

    Спасибо за годноту, а когда будут выпуски про aiohttp?

    • @t0digital
      @t0digital  4 роки тому +2

      Скоро будут!

  • @victortamanov
    @victortamanov 4 роки тому

    Спасибо! Как раз вот пишу код и думаю об этом. Очень кстати! Было бы супер как-нибудь поглядеть на код модульных тестов, которые в том числе проверяют такие ветки с прерываниями, чтобы велосипед не изобретать.

  • @Игорь-ч6ф3и
    @Игорь-ч6ф3и 4 роки тому

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

  • @PikaCh-t7i
    @PikaCh-t7i 4 роки тому

    God bless you!

  • @dddyom
    @dddyom 4 роки тому +1

    Спасибо!

  • @SUPERustam
    @SUPERustam 4 роки тому +7

    В первом примере LBYL подхода, должен быть еще else с выводом текста об не найденном ключе))

  • @Влад-ъ4м1м
    @Влад-ъ4м1м 4 роки тому

    Классный формат, рассказывать про такие маленькие фичи. И понимание зена возрастает, и код лучше будет

  • @westerling6368
    @westerling6368 4 роки тому +6

    А что насчет скорости выполнений? Читал, что try/except выполняются медленнее, чем условия, поэтому в своём коде обычно их не использую.

    • @ievgenk.8991
      @ievgenk.8991 4 роки тому

      @@avazart614 и не про чистоту кода, по всей видимости

  • @LewaSGN
    @LewaSGN 4 роки тому

    А я вместо кучи ифов пользуюсь свичкейзом через метод словаря .get(key, default=None). Получается очень красиво и читаемо!
    Хороший ролик, лайк!

    • @t0digital
      @t0digital  4 роки тому +1

      Дааа, .get очень удобный метод, тоже часто использую!
      Спасибо!

  • @arturlomakin3555
    @arturlomakin3555 4 роки тому +1

    Круто!

  • @konkon4658
    @konkon4658 4 роки тому

    Злой комментарий)))
    Спасибо за видео!

  • @АнтонинаСмет
    @АнтонинаСмет 4 роки тому

    Спасибо, лайк!

  • @antontsygulev6599
    @antontsygulev6599 Рік тому

    С меня предоставляется коммент за годный контент! Жаль, что задонатить не могу(

  • @dgrigorev
    @dgrigorev 4 роки тому

    Пасиб)

  • @pavelgrishin
    @pavelgrishin Рік тому

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

  • @dmitriyobidin6049
    @dmitriyobidin6049 4 роки тому +8

    В примере не совсем понятно, какое требование стоит в ТЗ. Т.к. в зависимости от этого может быть и If лучше, если ключа у нас действительно может не быть в словаре.
    Почему-то вы изначально за аксиому взяли, что нормальное поведение - это когда ключ есть. А если это не так? То нормальным будет уже if...
    Да и к тому же пример с if не полон, если добавить туда else с выводом той же ошибки, то разница уже не так очевидна.
    И почему во втором примере нельзя написать так?
    try:
    with open(tmp_file) as f:
    print(f.read())
    except IOError as e:
    print("Error")

    • @ievgenk.8991
      @ievgenk.8991 4 роки тому

      наверно что бы можно было понять где падает open а где read. Но это как то нелепо описывать условную логику через эксепшены.

  • @mcolegon
    @mcolegon 3 роки тому

    Ээээ...круто)

  • @TeppopucT
    @TeppopucT 4 роки тому +1

    Очень, очень не нравятся блоки try except в коде.
    Единственный момент, когда могу пойти на компромисс - это интеграции - различные запросы. Но при возможности, закидал бы камнями разрабов в момент разработки либ, методы которых бросают исключения (привет request timeout error).
    Мало того, что сами блоки занимают много места и делают код менее читабельным, так некоторые просто напишут "except: pass" и спят спокойно.
    Да и в целом... все ошибки не переловишь и этот домик из "except ...: ..." может расти и расти.
    И это одна из причин, почему перехожу потихоньку на Golang и пишу не dictionary[key], а dictionary.get(key) и обрабатываю None.
    С файлом пример понравился, но будем надеиться, что, во время работы с ним одного потока, другой не делает критических изменений с флогом "w+".

  • @ibragim1989
    @ibragim1989 4 роки тому +3

    Все в видео очень лаконично и ясно, будто хороший код на питоне. :)
    Вопрос, почему часто читаю в книгах по computer science, что использование исключений является не очень хорошей практикой программирования? И даже при создании своего языка Goland авторы, например, решили отказаться от поддержки исключений. Чем это вызвано?

    • @ievgenk.8991
      @ievgenk.8991 4 роки тому

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

  • @gatapov
    @gatapov 3 роки тому

    Отлично рассказываете! У вас есть видео об ООП в python? Если нет, то было бы круто от вас услышать базовые вещи об этом! Спасибо за ваш труд!

  • @MrDimka12101
    @MrDimka12101 4 роки тому

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

  • @MrPavelFrolov
    @MrPavelFrolov 4 роки тому +1

    я, в последнее время перешел assert'ы:
    from assertpy import assert_that
    some_dict = {}
    assert_that(some_dict, 'Dictionary').contains_key('key')
    AssertionError: [Dictionary] Expected to contain key , but did not.
    Да, не так оптимально, да, асерты не совсем про валидацию, но, на объёмах - работает лучше, чем куча try/except, в плане качества кода, читабельности. Где нужно оптимальнее - конечно меньше валидаций.
    Разработчки библиотеки сказал, что я пользуюсь defensive assertions, что бы это не значило :).

    • @MrPavelFrolov
      @MrPavelFrolov 4 роки тому

      @Вячеслав Украинцев так и есть. Поэтому они не про вадидацию. Но тут сторонняя библиотека, ну и асерты, прямо по назначению, я что-то и не использовал никогда.

  • @ФермаКактусов
    @ФермаКактусов 4 роки тому

    не знаю что написать но напишу)

  • @MrDimka12101
    @MrDimka12101 4 роки тому +4

    Хотел спросить. Будут ли видео по Flask? На мой взгляд это очень показательный фреймворк, т.к. есть большая свобода действия.

  • @Oleksii_Leshchenko
    @Oleksii_Leshchenko 4 роки тому

    А че) очень полезно)

  • @kostyaten
    @kostyaten 4 роки тому

    try/except вызывает отдельный стек Python в блоке try , по этому он будет медленнее. По этому с точки зрения языка вызов if 'key' in dict будет быстрее. if 'key' in dict и dict["key"] не вызывает два раза поиск ключа, а один раз, так как в стеке индекса он будет первый и пайтон всего лишь сравнит тот ли ключ.

    • @t0digital
      @t0digital  4 роки тому

      Исключения не медленнее if/else. Исключение медленнее только если оно происходит, но оно должно происходить редко, что следует даже из названия, исключение создано для исключительных ситуаций. docs.python.org/3/faq/design.html#how-fast-are-exceptions

    • @kostyaten
      @kostyaten 4 роки тому

      @@t0digital Да глянул исходники для try если ключ проверяют вызывают _PyObject_GetDictPtr , для OS ещё не придумали как сделать try быстрее.

    • @kostyaten
      @kostyaten 4 роки тому

      ​@@t0digital Ещё работает для Tuple

  • @mafia2mpru
    @mafia2mpru 4 роки тому

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

  • @sonicsp3149
    @sonicsp3149 4 роки тому

    Было бы интересно от вас послушать как SOLID применяются в Python. Думаю тема достаточно непростая и очень важная!

    • @kalik54
      @kalik54 4 роки тому

      github.com/heykarimoff/solid.python

  • @meh2414
    @meh2414 4 роки тому +2

    добрый комментарий
    добрый комментарий
    добрый комментарий

    • @t0digital
      @t0digital  4 роки тому

      Хахаах, спасибооо!

  • @psychopiece
    @psychopiece 4 роки тому +1

    Отличное видео! Алексей, когда же будет запуск обучения?

    • @t0digital
      @t0digital  4 роки тому +1

      Скоро-скоро!

  • @Dake6i
    @Dake6i 4 роки тому +2

    Я не спрошу "что такое принцип EAFP", я спрошу "кто такие котаны или катаны"

    • @cashncarry8
      @cashncarry8 4 роки тому

      Те кто отключают интернет во время деплоя))

  • @ВасяФомин-д4о
    @ВасяФомин-д4о 4 роки тому

    Анонсируйте подалуйста примерную дату курсов

  • @zshfan
    @zshfan 4 роки тому

    Огромное спасибо за видео, хоть пока мне и без толку данная информация (не тот уровень скила), но прям от видео веет дружеским наставничеством.
    Было бы кстати неплохо посмотреть ваш подход к началу проекта, с чего стоит начинать писать.
    P.S. А mailto:mailto: так и не исправили :-)

  • @евгешалулиша
    @евгешалулиша 4 роки тому

    Злой писать не охота, а вот добрый, пожалуй, оставлю. У меня такая проблема. Год назад начал изучать Питона вообще с нуля. С такого уровня, что вообще первый раз открыл cmd. Сейчас пишу программы для своего бизнеса, но у меня нет развития, потому что имеющиеся знания покрывают потребности моего дела. Я понимаю, что с таким уровнем ни в какую компанию не попадёшь, а хотелось бы связать себя с профессией программиста. Прямо беда. Хочу развиваться, но вместо этого бег на месте.

  • @РоманКух-ч8щ
    @РоманКух-ч8щ 4 роки тому

    1. try except сложнее чем использование if key in, в читабельности для человека, из за количества возможных отрицательных срабатываний, которые спрятаны в исключениях. И if является более явным и однозначно трактуемым, нежели exception.
    2. Исключения крайне ресурсоемки, и программирование на них, если можно обойтись без них, это табу. В процессе, появления исключения, в питоне собирается информация о нем, что требует много ресурсов, и останавливает поток исполнения. Такие места можно заддосить.
    3. Ошибки лучше оформлять
    if key not in data:
    raise Exception('исчерпывающее описание данной ситуации')
    нежели то что вы привели в пример. Ваш пример можно часами трактовать, а какую ситуация для чего разраб покрыл этим exception.

    • @t0digital
      @t0digital  4 роки тому

      Исключение такие же дешёвые, как if, если не возникает исключения, а возникать они должны редко исходя даже из названия. Что if более читаем, чем except - нет же. В исключении явно понятно, какая логика нормальна, какая исключительна, в if else обе ветки равнозначны и без контекста, без коментов это непонятно. Райзить Exception вместо KeyError или IndexError - не надо.

    • @РоманКух-ч8щ
      @РоманКух-ч8щ 4 роки тому

      @@t0digital
      1. Style
      docs.python.org/3.8/faq/design.html#how-fast-are-exceptions
      2. Performance
      paltman.com/try-except-performance-in-python-a-simple-test/
      3.
      - Как в коде, который покрыт несколькими слоями try except finally, излишние try, усложняет структуру кода, доп отступами от которых не избавиться.
      - Две строки, лучше чем четыре.
      - Как быть здесь? На каком ключе споткнулись?
      try:
      value = data['key1']['key2']
      except IndexError:
      pass
      - может все же вот так понятней?
      if 'key1' not in data:
      raise Exception('исчерпывающий ответ что пошло не так')
      исполнение продолжилось.
      - к какому жесткачу, приводит неосторожное использование.
      try:
      value = function()
      except Exception:
      pass
      - трактовки.
      Что можно ожидать от if key in data ?
      Наверно, проверку вхождения, в массив, в строку или есть ли ключ в hashmap, зависит от типа данных data.
      Что можно ожидать от try except. Очень много всего, особенно когда обернута функция, и глубину вызовов внутри этой функции не видно, и на любом этапе может произойти исключение, которое этот перехват скроет. А бывает и приведет к некорректному исполненbю алгоритма.
      - нарушение логики.
      С исключениями, мы предпочитаем сначала наступить в кучу навоза, а потом принимать решение. А проще, посмотреть прежде чем наступать нет ли там кучу с помощью if.
      Что на итог:
      Эту конструкцию, опытный разработчик назовет вкусовщиной. Я же против этих конструкций, т.к. мы не все опытные и знаем все подводные камни и отдаем себе отчет в них, и суем их всюду.
      И это приводит к страшным поломкам. Чего не случится, если бы использовали if.

  • @RomaxSinergy
    @RomaxSinergy 4 роки тому

    Денис Борисов от software enginering

  • @vladburba5734
    @vladburba5734 4 роки тому

    Хороший Рол вкусный! Хорошо зашёл) Кто такие Катаны? «здорова Катаны»

    • @drdeepdreamer7090
      @drdeepdreamer7090 4 роки тому +1

      Думаю, что имеется в виду кОтаны. Ну т.е. мальчики выросшие из котяток... 😃

  • @ТимурКутуев
    @ТимурКутуев 4 роки тому +2

    Когда будет урок про git? В первых видео обещали, но так и не разобрали данную тему :(
    Сейчас на работе пришлось самому разбираться. Очень жалею что не юзал это раньше.

    • @t0digital
      @t0digital  4 роки тому +1

      Я писал в 2013м статью по базовому гиту - goloburdin.blogspot.com/2013/11/git-bitbucket-20.html
      Видео тоже планирую, просто хочется сделать что-то глубже, чем просто commit/pull/push/merge/checkout

    • @MrBytmin
      @MrBytmin 4 роки тому

      Как вас вообще на работу взяли)

  • @redologs
    @redologs 4 роки тому

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

  • @pythondeveloper252
    @pythondeveloper252 3 роки тому

    4:56 у вас при исключении файл не закроется.
    И кстати конструкция with закрывает файл после действий, но здесь это не поможет.

  • @spappinventor2850
    @spappinventor2850 4 роки тому +1

    А почему нет блока else, он нужен чтобы сообщить что ключа нет! )

  • @kotonyahi
    @kotonyahi 3 роки тому

    4:44 а разве не лучше считывать тоже в блоке try? Вдруг во время чтения что-то произойдёт.
    А, точно после открытия файла для чтения файл полностью принадлежит процессу и ошибки быть не может... поэтому покрасивше будет выделить чтение в блок else

  • @ГеоргийТимофеевский-х9х

    Вроде сишники (особенно эмбеддщики) говорят, что исключения какие-то дорогие и слишком медленные из-за того, что там какие-то манипуляции со стэком происходят. Это правда?

  • @Uni-Coder
    @Uni-Coder 4 роки тому

    Письмо от хейтера (шутка, уважаю твой канал).
    Внезапно, в Rust лучше реализованы принципы Python, чем в самом Python: и принцип "явное лучше неявного", и принцип "EAFP", а в качестве бонуса ещё и статическая типизация и всё это делается без исключений.
    value = some_hashmap.get("key")? // Передача ошибки выше по стеку
    value = some_hashmap.get("key").unwrap(); // Ленивый вылет из программы
    value = some_hashmap.get("key").expect("Нет тут такого ключа"); // Чуть более сложный вылет
    Всё в одну строку.
    Ну, и говорить о преимуществе одной константной операции вместо двух... На python?.. Гм... Ну, такое

    • @t0digital
      @t0digital  4 роки тому

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

  • @КириллКириллович
    @КириллКириллович 4 роки тому +1

    Но исключения - это очень дорогое удовольствие, их стоит-таки избегать, если это возможно.

    • @dmytrokorbanytskyi1586
      @dmytrokorbanytskyi1586 4 роки тому

      в чем дороговизна, поясните плз.

    • @ИванОмельченко-б7в
      @ИванОмельченко-б7в 4 роки тому

      нет никакой дороговизны, по крайней мере в случае CPython.
      stackoverflow.com/questions/2522005/cost-of-exception-handlers-in-python
      docs.python.org/3/faq/design.html#how-fast-are-exceptions

    • @dmytrokorbanytskyi1586
      @dmytrokorbanytskyi1586 4 роки тому

      @@ИванОмельченко-б7в абсолютно согласен с вами. На первое место в питоне надо ставить читабельность и простоту кода.

  • @rmatveev
    @rmatveev 4 роки тому

    Последний фрагмент кода нужно было написать так, чтобы *try-except* был внутри функции?

    • @t0digital
      @t0digital  4 роки тому

      try:
      something = some_dict["key"]
      except KeyError:
      # do some stuff
      pass
      else:
      some_func(something)
      Напр, так

  • @kenybond6564
    @kenybond6564 4 роки тому +1

    В 1с использование такой конструкции считается плохим тоном.
    Значит программист плохо учел возможные варианты, раз у него что-то может вызвать исключение.

    • @СергейПресняков-о4р
      @СергейПресняков-о4р 4 роки тому

      1C сам по себе считается плохим тоном.
      P.S. Ладно, шутка

    • @kenybond6564
      @kenybond6564 4 роки тому

      @@СергейПресняков-о4р давай напишем систему лучше) Аналогов я не нашел, ниша свободна.
      Не шутка)

  • @weefix3108
    @weefix3108 4 роки тому +1

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

    • @t0digital
      @t0digital  4 роки тому +1

      У меня шрифт Monaco в терминале

    • @weefix3108
      @weefix3108 4 роки тому

      @@t0digital Спасибо вам большое

  • @someelse989
    @someelse989 4 роки тому

    Добрый и злой комментарий. Написал как ты попросил))

  • @Дамир-ь4ч
    @Дамир-ь4ч 4 роки тому

    Зачем вы сделали бейсбольный мячик своим крестражем?

  • @doomymax577
    @doomymax577 4 роки тому

    я так и не понял объясните еще раз- нужно всегда проверять есть ли ключ в структуре данных и потом его применять?

    • @t0digital
      @t0digital  4 роки тому

      Всегда не надо, надо, когда есть вероятность, что ключа нет в словаре. Когда что-то может пойти не так в программе, на это надо заложиться

    • @doomymax577
      @doomymax577 4 роки тому

      @@t0digital вот на фронтэнде так всегда приходится делать потому сервера часто падают и поэтому в большинстве случаев так приходится делать

  • @govdamikhaylo4183
    @govdamikhaylo4183 4 роки тому +1

    Аригато козаимасу:)

  • @ashur1k
    @ashur1k 2 роки тому

    Как можно сравнивать разный функционал? Если вместо каждого if использовать try except то не только сложно будет читать, но и выполняться такая программа будет намного дольше.

    • @t0digital
      @t0digital  2 роки тому

      Так и не предлагается везде заменить if на try/except

  • @cashncarry8
    @cashncarry8 4 роки тому

    А точно стоит ронять весь код ради ключа/файла?
    В логи записать ERROR недостаточно будет?

    • @t0digital
      @t0digital  4 роки тому +1

      Ронять весь код не надо, если это не фатальная проблема, с которой невозможно продолжать. Обработка исключений и eafp и позволяет не убивать программу.

  • @Фанатик-к5т
    @Фанатик-к5т 4 роки тому

    Что там по курсу??

  • @BadekYO
    @BadekYO 4 роки тому +1

    Насчет больших блоков кода отчасти не согласен, формально нас никто не ограничивает от большого числа except's, на этом тоже вполне можно строить логику скрипта, если вводятся собственные унаследованные классы исключений. Например, если у нас есть сервис который должен крутится в улсовном бесконечном лупе, то отказ от оборачивания кода в целе лупа может привести просто к его паданию и остановке всего, с другой же стороны, если мы ловим исключения в основной логике и кажется, что предусмотрели все, то в блоке лупа есть возможность залогировать исключение с трейсбэком и признаться, что мы что-то да не предусмотрели. Мне кажется, что это более правильный подход, впрочем видео то не про это, просто немного привязался к финальным фразам.