NameError: имя «имя_переменной» не определено, когда я пытаюсь поймать исключение

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

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

Код, который я показываю, теперь отлично работает в том случае, если оба файла находятся в каталоге. Однако, когда я пытаюсь проверить свое исключение, я получаю сообщение об ошибке Traceback Error с NameError = list_of_cats not found, а затем отображается мое собственное сообщение.

Как мне написать программу, чтобы отображалось только мое custom_message.

filename_1 = "cats.txt"
filename_2 = "dogs.txt"

try:
    with open(filename_1) as file_object_1, open(filename_2) as file_object_2:
        list_of_cats = file_object_1.read()
        list_of_dogs = file_object_2.read()

except FileNotFoundError:
    print(f"Sorry one of the files {filename_2} is not in this directory")

print(list_of_cats)
print(list_of_dogs)

Это сообщение об ошибке:

NameError: name 'list_of_cats' is not defined
Sorry one of the files dogs.txt is not in this directory

Process finished with exit code 1

person bernd_singer_TL    schedule 27.10.2020    source источник


Ответы (1)


Ошибка возникает из-за того, что при печати переменные list_of_cats и list_of_dogs не определяются при их печати. Чтобы исправить это, вы можете использовать следующий код:

filename_1 = "cats.txt"
filename_2 = "dogs.txt"

try:
    with open(filename_1) as file_object_1, open(filename_2) as file_object_2:
        list_of_cats = file_object_1.read()
        list_of_dogs = file_object_2.read()

except FileNotFoundError:
    print(f"Sorry one of the files {filename_2} is not in this directory")

else:
    print(list_of_cats)
    print(list_of_dogs)
person Abhigyan Jaiswal    schedule 27.10.2020
comment
спасибо, ваше решение сработало :) Я получаю ошибку трассировки, потому что переменные не находятся в глобальной области действия программы? - person bernd_singer_TL; 27.10.2020
comment
Суть в том, что list_of_cats определяется только в том случае, если вы делаете list_of_cats = file_object_1.read(). Если программа выдает исключение до того, как достигнет этой части кода, то list_of_cats (даже имени) нет, и поэтому вы получаете NameError. - person Matthias; 27.10.2020