почему FileNotFoundError не работает в python файле - PullRequest
1 голос
/ 05 апреля 2020

У меня есть имя пользователя. json пустой файл. Мне нужно спросить у пользователя имя, поприветствовать его и сохранить его в файле json, в противном случае он уже существует внутри файла json, мне нужно использовать имя и написать 'welcome back' + username

import json

filename = 'username.json'
try:
    with open(filename) as file_obj:
        username = json.loads(file_obj)
except FileNotFoundError:
    username = input('What is your name ? ')
    with open(filename, 'w') as file_obj:
        json.dump(username, file_obj)
        print('We will remember you as ' + username + ' !')
else:
    print('Welcome back ' + username + '!')

Но я столкнулся с ошибками:

Traceback (most recent call last):
  File "main.py", line 6, in <module>
    username = json.load(file_obj)
  File "/usr/local/lib/python3.8/json/__init__.py", line 293, in load
    return loads(fp.read(),
  File "/usr/local/lib/python3.8/json/__init__.py", line 357, in loads
    return _default_decoder.decode(s)
  File "/usr/local/lib/python3.8/json/decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/local/lib/python3.8/json/decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

вы можете использовать:

import os
import json

filename = 'username.json'
username = input('What is your name ? ')

if os.path.isfile(filename ): # check if the file exist:
    if os.stat(filename ).st_size == 0: # check if the file is empty
        with open(filename, 'w') as fp:
            json.dump([username], fp)
            print('We will remember you as ' + username + ' !')

    else:
        with open(filename) as fp:
            user_names = json.load(fp)

        with open(filename, 'w') as fp:
            if username in user_names : 
                print('Welcome back ' + username + '!')
            else:
                user_names.append(username)
                json.dump(user_names, fp)
                print('We will remember you as ' + username + ' !')

else:
    with open(filename, 'w') as fp:
        json.dump([username])
        print('We will remember you as ' + username + ' !')
0 голосов
/ 05 апреля 2020

Попробуйте это:

import json

filename = 'username.json'
try:
    with open(filename) as file_obj:
        username = json.loads(file_obj)["name"]
except FileNotFoundError:
    username = input('What is your name ? ')
    with open(filename, 'w') as file_obj:
        json_data = {"name": username}
        json.dump(json_data, file_obj)
        print('We will remember you as ' + username + ' !')
else:
    print('Welcome back ' + username + '!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...