В этом коде есть несколько вещей, которые нужно исправить.
Во-первых, он не запускается, потому что эта строка недействительна, отсутствует закрывающий '}'.
return filearch['patients'].update({user_paz : a)
Как только это будет исправлено, запустите код, подобный этому
user = addone()
save(user)
приводит к этой ошибке:
Traceback (most recent call last):
File "test.py", line 30, in <module>
user = addone()
File "test.py", line 21, in addone
users_pat = Patient(**makeone())
File "test.py", line 18, in makeone
a = {'name': name, 'surname': surname, 'notes': notes}
NameError: name 'name' is not defined
Это потому, что в makeone
вы присваиваете входные значения nome
, cognome
и data
, но пытаетесь сохранить несуществующие переменные name
, surname
и notes
.
Если мы исправим эти имена и снова запустим, мы получим:
Traceback (most recent call last):
File "test.py", line 31, in <module>
save(user)
File "test", line 26, in save
return filearch['patients'].update({user_paz: a})
NameError: name 'a' is not defined
In a
- это имя переменной, которую вы создаете в makeone
, но это имя допустимо только внутри функции makeone
. функция save
знает только о переменной user_paz
, которую вы ей передали, поэтому измените
return filearch['patients'].update({user_paz : a})
до
return filearch['patients'].update({user_paz : user_paz})
Наконец, как уже упоминалось в комментариях, вам необходимо закрыть файл полки, чтобы убедиться, что содержимое сохранено.
Вот улучшенная версия вашего кода: он сохраняет ввод и затем сообщает о содержимом файла полки.
import shelve
class Patient:
def __init__(self, name='', surname='', notes=''):
self.name = name
self.surname = surname
self.notes = notes
def __repr__(self):
# A readable representation of a Patient object.
return '<Patient(name={0.name}, surname={0.surname}, notes={0.notes}>'.format(self)
# Use the same readable representation if str(patient) is called.
__str__ = __repr__
def makeone():
print('Insert a name')
name = input('Nome: ')
print('Insert a surname')
surname = input('surname: ')
print('Insert notes')
notes = input('notes: ')
a = {'name': name, 'surname': surname, 'notes': notes}
return a
def addone():
users_pat = Patient(**makeone())
return users_pat
def save(user_paz):
with shelve.open('archive') as archive:
archive['patients'] = {user_paz.name: user_paz}
return
def report():
with shelve.open('archive') as archive:
for name, patient in archive.items():
print(name, patient)
return
def main():
patient = addone()
save(patient)
report()
return