похоже, вместо добавления, вы хотите установить загруженный JSON в доход, чтобы предотвратить вложение массива все глубже и глубже с каждой итерацией.
def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income (json.load(f))
else:
pass
должно стать
def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income = json.load(f)
else:
pass
Форм-фактор списка переменной дохода должен быть сохранен в файле JSON.
Пример:
>>> testlist = ['test', 'test2']
>>> import json
>>> with open('income.json', 'w') as g:
... json.dump(testlist, g)
...
выход и перезапуск
>>> import json
>>> with open('income.json') as f:
... testlist = json.load(f)
...
>>> testlist
['test', 'test2']
edit: Итак, одна вещь, которая могла быть проблемой, касается области видимости переменных. Обычно функции принимают параметры. это гарантирует, что ясно, какое значение будет принимать функциональная переменная в случаях, когда вы используете то же имя переменной в других местах кода. В текущем коде, если вы распечатаете переменную дохода в функции транзакций, вы увидите, что это пустой список.
вы можете исправить это, передав список своим функциям:
import json
import os.path
def file_exists():
if os.path.exists('income.json') == True:
with open('income.json') as f:
income = json.load(f)
print(income)
return income
else:
return []
def transactions(income):
print(income)
with open('income.json', 'w') as g:
entry = float(input('Transaction info: '))
print(entry)
income.append(entry)
print(income)
json.dump(income, g)
income = file_exists()
transactions(income)
print(income)