Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 20, 2022 14:03:31

megaeda
Зарегистрирован: 2022-04-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается отработать ошибку

В коде создал две ошибки:
1. по указанному адресу нет файла
2. неправильное имя аргумента функции
В функции прописал единообразные улавливатели ошибки, но except FileNotFoundError работает, а except NameError нет. Не могу понять почему. Объясните, люди добрые и не очень.

Собственно код:

 dogslist = '10-8/dogs.txt'
catslist = '10-8/cat.txt'
def prinfile(filename):
    try:
        with open(filename) as f_obj:
            lines = f_obj.readlines()
        for line in lines:
            print(line.strip().title())
        print()
    except FileNotFoundError:
        print(f'Ouups, file "{filename}" not found')
    except NameError:
        print(f'We dont know what is the {filename}. Chek file name.')
    
prinfile(dogslist)
prinfile(catslist)
prinfile(dsfdsf)

И вот результат:

Шарик
Палкан
Лесси

Ouups, file “10-8/cat.txt” not found
Traceback (most recent call last):
File “CUsers/1/Desktop/Мат часть/phyton/Практика/10-8.py”, line 20, in <module>
prinfile(dsfdsf)
NameError: name ‘dsfdsf’ is not defined

Отредактировано megaeda (Апрель 20, 2022 15:00:43)

Офлайн

#2 Апрель 20, 2022 15:09:02

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Не получается отработать ошибку

А зачем её обрабатывать? Если код синтаксически неверный, то с какого перепугу он должен таким оставаться? Ошибка либо должна быть исправлена, либо программа должна падать, а не просто отрабатывать и сообщение выводить какое-то, якобы всё нормально.

У тебя не имя файла неправильное, а имя переменной неправильное. Это считается синтаксической ошибкой кода, а не логической ошибкой алгоритма.



Офлайн

#3 Апрель 20, 2022 15:29:40

megaeda
Зарегистрирован: 2022-04-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается отработать ошибку

py.user.next
А зачем её обрабатывать?
Я пока на стадии изучения языка и столкнулся с непониманием хода работы программы, посему и спросил.

py.user.next
У тебя не имя файла неправильное, а имя переменной неправильное
Да я понял, что это разные виды ошибок и поэтому и написал два разных условия в except .
Как это вижу я:
идем по коду сверху вниз.

задали пару переменных - OK
определили функцию и написали ее тело без синтаксических ошибок - OK

вызвали функцию в первый раз (dogslist), пробежали всё тело функции, не столкнулись с ошибками выдали результат - OK

вызвали функцию второй раз (catslist), дошли до
 with open(catslist) as f_obj:
столкнулись с ошибкой -> идём в except видим сценарий именно с этой ошибкой, реализуем его - OK

вызвали функцию третий раз (dsfdsf), дошли до
 with open(dsfdsf) as f_obj:
столкнулись с ошибкой -> идём в except и… вот тут и кроется моё непонимание. Там есть сценарий именно с этой ошибкой синтаксической/логической какой угодно, у нее есть имя NameError и именно его мы и ловим , почему он не реализуется???

Или я не верно где-то представил ход выполнения программы?








Отредактировано megaeda (Апрель 20, 2022 15:33:22)

Офлайн

#4 Апрель 20, 2022 15:36:35

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10003
Репутация: +  857  -
Профиль   Отправить e-mail  

Не получается отработать ошибку

megaeda
вызвали функцию третий раз (dsfdsf), дошли до
  
with open(catslist) as f_obj:
Никуда ты не дошёл.

megaeda
  
prinfile(dsfdsf)
Прямо в этом месте оно у тебя справшивает “что это за мура ”dsfdsf“? я не знаю, поэтому обратиться к этому не могу и в функцию ничего передать не могу”.



Офлайн

#5 Апрель 20, 2022 15:42:37

megaeda
Зарегистрирован: 2022-04-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Не получается отработать ошибку

py.user.next
Прямо в этом месте
Понял. Реверансы, гранд батманы и земные поклоны Вам, мил человек!

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version