Reputation: 1014
I am trying to use a pickle in Python and I am failing miserably. For each error that I overcome I get another message. I get the following message when I run my code. I am getting a syntax error for my use of 'else'. Why is that?
I am a newb to Python but I can't figure out what am I doing wrong?
import pickle
def main():
file_mail = open('email.dat','wb')
save_data(file_mail)
file_mail.close()
def save_data(file):
email = {}
count = 0
while count == 0:
print('Add an email: 1')
print('Modify an email: 2')
print('Delete an email: 3')
print('Display the list: 4\n')
choice = input('Enter a number from the list above:')
if int(choice)== 1:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Added Successfully')
if int(choice) == 2:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Modified Successfully')
if int(choice) == 3:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Deleted Successfully')
if int(choice) == 4:
print(email)
else:
print('Invalid selection')
c = input('Do you want to continue y/n: ')
if c.upper() == 'N':
count = 1
print('Invalid Letter')
file_mail = open('email.dat','wb')
pickle.dump(email,file_mail)
file_mail.close()
main()
Upvotes: 3
Views: 908
Reputation: 1014
Thanks @McGrady! Here is the final answer I got.
import pickle
def main():
file_mail = open('email.dat','wb')
save_data(file_mail)
file_mail.close()
def save_data(file):
email = {}
count = 0
while count == 0:
print('Add an email: 1')
print('Modify an email: 2')
print('Delete an email: 3')
print('Display the list: 4\n')
choice = input('\nEnter a number from the list above:')
if int(choice)== 1:
name = input('Name:')
mail = input('E-mail:')
email[name] = mail
print('Added Successfully\n')
else:
if int(choice) == 2:
name = input('Name:')
mail = input('E-mail:')
if name in email:
email[name] = mail
print('Modified Successfully\n')
else:
print('Name not found')
else:
if int(choice) == 3:
name = input('Enter name you want to delete:')
if name in email:
email.pop(name)
print('Deleted Successfully\n')
else:
print('Name not found')
else:
if int(choice) == 4:
print(email)
else:
print('Invalid selection\n')
c = input('Do you want to continue y/n: ')
if c.upper() == 'N':
count = 1
else:
if c.upper() == 'N':
count = 1
print('Invalid Letter')
file_mail = open('email.dat','wb')
pickle.dump(email,file_mail)
file_mail.close()
main()
Upvotes: 0
Reputation: 11477
Try to use rb
mode when reading a pickle-containing file :
file_mail = open('email.dat','rb')
email = pickle.load(file_mail)
And use wb
mode when writing a pickled representation of obj to the open file object:
output = open('data.pkl', 'wb')
pickle.dump(data1, output)
See more details from pickle example.
Upvotes: 4