#python #json #python-3.x #discord.py
#python #json #python-3.x #discord.py
Вопрос:
Python, похоже, не записывает в мой первый файл, но делает это для второго (и последнего).
Я пишу discord-бота, который принимает идентификатор гильдии и использует их в качестве имен файлов, для каждой гильдии мне нужен файл json, содержащий переменные для этой конкретной гильдии.
Все было хорошо, пока я не смог найти какое-либо возможное решение этой проблемы:
Task exception was never retrieved
future: <Task finished name='Task-13' coro=<twitchGet() done, defined at C:UsersPedroDesktopPythondiscord_streambot.py:82> exception=JSONDecodeError('Expecting value: line 1 column 1 (char 0)')>
Traceback (most recent call last):
File "C:UsersPedroDesktopPythondiscord_streambot.py", line 87, in twitchGet
values = await getJsonValues(guild.id)
File "C:UsersPedroDesktopPythondiscord_streambot.py", line 79, in getJsonValues
jsonInfo = json.load(File)
File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjson__init__.py", line 293, in load
return loads(fp.read(),
File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjson__init__.py", line 346, in loads
return _default_decoder.decode(s)
File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjsondecoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "C:UsersPedroAppDataLocalProgramsPythonPython39-32libjsondecoder.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)
Теперь я, к счастью, знаю, как читать, и могу определить, что проблема заключается в том, что функция json.load() пытается загрузить пустой файл json, но моя функция записи json, похоже, не имеет никаких проблем, кто-нибудь знает, что не так, или другой способ записи функции? Повторяю, функция записывает второй (и на данный момент последний) файл, но не первый
def createDefaultFile(id: int):
writeToFile = {
'delay' : TIMEDELAY,
'streamers' : [],
'textchannel' : None,
}
file = Path(str(id) '.json')
if file.is_file():
print('File Exists n')
else:
print('Creating File n')
open(str(id) '.json','a').close()
with open(str(id) '.json', 'w', encoding ='utf8') as json_file:
json.dump(writeToFile, json_file)
Редактировать:
Как и было запрошено, строка 87 discord_streambot.py
#Check if there are streamers set
count = 0
for guild in bot.guilds:
values = await getJsonValues(guild.id)
for streamer in values['streamers']:
count = 1
Функция getJsonValues:
async def getJsonValues(id: int):
try:
File = open(str(id) '.json','w ')
except IOError:
print('Cannot open file')
return None
jsonInfo = json.load(File)
return jsonInfo
Комментарии:
1. Я бы с удовольствием помог. Однако я не думаю, что у меня есть все части головоломки. Вы сказали, что это так
trying to load an empty json file
. Не должно ли этого быть? Сначала это заполняется где-то еще? Пожалуйста, предоставьте более подробную информацию. Ваш код в строке 87discord_streambot.py
будет необходим, чтобы помочь вам (я полагаю). Рад помочь2. Файл json не должен быть пустым, он должен быть загружен с параметрами по умолчанию в writeToFile dict, я добавлю запрошенный вами код, если это поможет
3. Прежде чем позвонить
jsonInfo = json.load(File)
, не могли бы выprint(File)
? Кроме того, не рекомендуется называть переменные с первой буквой в верхнем регистре. Он сообщает людям, что переменная является классом.4. Я буду применять эту практику в будущем. Вывод следующий:
<_io.TextIOWrapper name='402169002732027924.json' mode='w ' encoding='cp1252'>
Ответ №1:
Пожалуйста, распечатайте содержимое вашего файла JSON, я не могу быть уверен, не глядя на это, однако я считаю, что ваша проблема в том, что файл JSON пуст. Пожалуйста, сначала запишите это в файл JSON: {}
Затем повторите попытку. Если это не сработает, распечатайте содержимое JSON и ответьте на этот ответ, чтобы я мог помочь вам в дальнейшем.
Комментарии:
1. Файлы json не являются проблемой, проблема заключается в коде, связанном с их созданием, некоторые файлы имеют содержимое, а другие нет, я, кажется, не понимаю, почему это происходит
Ответ №2:
Проблема, с которой я столкнулся, заключалась в функции getJsonValues в строке
File = open(str(id) '.json','w ')
По-видимому, ‘w ‘ возился с файлом, делая его пустым каждый раз, когда я запускал функцию, изменил его на ‘r’, поскольку ‘w ‘ не был необходим, и это решило проблему. В любом случае спасибо