Найти - Пользователи
Полная версия: Не получается отработать ошибку
Начало » Центр помощи » Не получается отработать ошибку
1
megaeda
В коде создал две ошибки:
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
py.user.next
А зачем её обрабатывать? Если код синтаксически неверный, то с какого перепугу он должен таким оставаться? Ошибка либо должна быть исправлена, либо программа должна падать, а не просто отрабатывать и сообщение выводить какое-то, якобы всё нормально.

У тебя не имя файла неправильное, а имя переменной неправильное. Это считается синтаксической ошибкой кода, а не логической ошибкой алгоритма.
megaeda
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 и именно его мы и ловим , почему он не реализуется???

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








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

megaeda
  
prinfile(dsfdsf)
Прямо в этом месте оно у тебя справшивает “что это за мура ”dsfdsf“? я не знаю, поэтому обратиться к этому не могу и в функцию ничего передать не могу”.
megaeda
py.user.next
Прямо в этом месте
Понял. Реверансы, гранд батманы и земные поклоны Вам, мил человек!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB