Python: FileNotFoundError не перехватывается блоком try-Кроме - PullRequest
0 голосов
/ 23 января 2020

недавно я начал изучать Python и столкнулся с проблемой, на которую не могу найти ответ. Идея программы - запросить имя пользователя, загрузить словарь из файла JSON, а если имя в словаре - напечатать любимый номер пользователя.

Код, который загружает файл JSON выглядит так:

import json

fav_numbers = {}
filename = 'numbers.JSON'

name = input('Hi, what`s your name? ')
try:
    with open(filename) as f_obj:
        fav_numbers = json.load(f_obj)
except FileNotFoundError:
    pass

if name in fav_numbers.keys():    

    print('Hi {}, your fav number is {}, right?'.format(name, fav_numbers[name]))

else:
    number = input('Hi {}, what`s your favourte number? '.format(name))
    fav_numbers[name] = number

    with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, filename)

Тем не менее, когда я пытаюсь запустить его, он вылетает, сообщая мне:

Exception has occurred: FileNotFoundError
[Errno 2] No such file or directory: 'numbers.JSON'
  File "/home/niedzwiedx/Dokumenty/Python/ulubionejson.py", line 22, in <module>
    with open(filename) as f_obj:

Что я делаю не так, чтобы поймать исключение? (Уже пытался изменить FileNotFoundError на OSError или IOError)

1 Ответ

0 голосов
/ 23 января 2020

Ошибка исходит от вашей последней строки, вне вашей попытки / за исключением

with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, filename)

имя файла - это строка, а не файл.

Вы должны использовать

with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, f_obj)

Для дополнительной безопасности вы можете окружить эту часть попыткой / кроме нее

try:
    with open(filename, 'w') as f_obj:
        json.dump(fav_numbers, f_obj)
except (FileNotFoundError, PremissionError):
    print("Impossible to create JSON file to save data")

...