Python Forum

Full Version: save button: IndexError
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
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
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.
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.
Try adding the defaultextension option.

fln = filedialog.asksaveasfilename(initialdir = os.getcwd(), title = 'Save CSV', filetypes = (("CSV File", "*.csv"), ("All Files", "*.*")), defaultextension=True)
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)