Python Forum
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
save button: IndexError
#1
So my app can successfully export to csv file and import it. But when I try to save the data into the DB I'm getting error.
One note: when I import the csv file there is extra one empty row.

IndexError: list index out of range

Here is my function for save buton

        def savedb():
            if messagebox.askyesno('Confirm', 'Are you sure you want to save the data into the Database?'):
                try:
                    
                    for i in mydata:
                        sid = i[0]
                        fname = i[1]
                        surname = i[2]
                        idc = i[3]
                        query = "INSERT INTO student_questioner(student_id, student_name, student_surname, student_card, student_score) VALUES (NULL, ?, ?, ?,?) "
                        cur.execute(query, (sid,fname, surname, idc))
                    con.commit()
                    clear()
                    messagebox.showinfo('Data Saved', 'Data has been saved to the database!')
                except EOFError as a:
                    messagebox.showerror(a)
            else:
                return False
Reply
#2
The error should have the line number its from, not just the error.

Somewhere you are using an index, like line6, sid=i[0]. There the 0 is the index into the collection i. But since i is created from mydata, and mydata isn't defined here, there's no way to tell how many elements it has

If it has less than 4 elements, then one of lines 6 through 9 will generate an error. You might want to print out either the collection or the length of the collection to see if it's what you expect.
Reply
#3
I found the solution. The error was when I export the CSV file, which has extra empty row.I fix this with "lineterminator='\n'".
I have some another bug to fix now, when I save the file, the file doesn't have extension after the name. Even I add *.csv extension before it save the file :\
fln = filedialog.asksaveasfilename(initialdir = os.getcwd(), title = 'Save CSV', filetypes = (("CSV File", "*.csv"), ("All Files", "*.*")))
(Oct-25-2020, 11:40 PM)bowlofred Wrote: The error should have the line number its from, not just the error.

Somewhere you are using an index, like line6, sid=i[0]. There the 0 is the index into the collection i. But since i is created from mydata, and mydata isn't defined here, there's no way to tell how many elements it has

If it has less than 4 elements, then one of lines 6 through 9 will generate an error. You might want to print out either the collection or the length of the collection to see if it's what you expect.
Reply
#4
Try adding the defaultextension option.

fln = filedialog.asksaveasfilename(initialdir = os.getcwd(), title = 'Save CSV', filetypes = (("CSV File", "*.csv"), ("All Files", "*.*")), defaultextension=True)
Maryan likes this post
Reply
#5
It is working smoothly now :) Thank you! Thumbs Up

(Oct-26-2020, 01:05 AM)bowlofred Wrote: Try adding the defaultextension option.

fln = filedialog.asksaveasfilename(initialdir = os.getcwd(), title = 'Save CSV', filetypes = (("CSV File", "*.csv"), ("All Files", "*.*")), defaultextension=True)
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020