Python Forum
invalid literal for int() with base 10: '' - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: invalid literal for int() with base 10: '' (/thread-22923.html)



invalid literal for int() with base 10: '' - mrsenorchuck - Dec-03-2019

Getting an error "invalid literal for int() with base 10: ''" on the line where I assign the keys.

What is the best way to debug?
# dictionary keys will be the (Club and year)
premier = {} 
print()
# open the file
with open(r"League_Table.csv") as data_file:
    # read in the first line containing the headers
    headers = data_file.readline()
    
    # for each other line in the file
    for line in data_file:
        # split each line into components (remove white space from ends of line)
        Team,Pos,Pld,HW,HD,HL,HG,HC,AW,AD,AL,AG,AC,W,D,L,G,C,DF,Pts,Champ,Rel,Year = line.strip().split(",")
        # insert the data into the dictionary
        premier[str(Team),int(Year)] = ((int(Pos), int(Pld), int(HW), int(HD), int(HL), int(HG), int(HC), int(AW), int(AD), int(AL), int(AG), int(AC), int(W), int(D), int(L), int(G), int(C), int(DF), int(Pts), Champ, Rel))
Output:
Team,Pos,Pld,HW,HD,HL,HG,HC,AW,AD,AL,AG,AC,W,D,L,G,C,DF,Pts,Champ,Rel,Year Manchester United,1,42,14,5,2,39,14,10,7,4,28,17,24,12,6,67,31,36,84,Yes,No,1993 Aston Villa,2,42,13,5,3,36,16,8,6,7,21,24,21,11,10,57,40,17,74,No,No,1993 Norwich City,3,42,13,6,2,31,19,8,3,10,30,46,21,9,12,61,65,-4,72,No,No,1993



RE: invalid literal for int() with base 10: '' - ichabod801 - Dec-03-2019

The way you are reading the data into individual variables makes it harder to debug. It would be easier if you had that info in a list or dictionary. Especially since it doesn't seem like you are doing much with those variables.

I would start by printing team and year right before line 14. That way you will know which line in the data is causing the problem (the last one printed), and you can check that like to make sure it has valid data.


RE: invalid literal for int() with base 10: '' - mrsenorchuck - Dec-03-2019

(Dec-03-2019, 04:11 PM)ichabod801 Wrote: The way you are reading the data into individual variables makes it harder to debug. It would be easier if you had that info in a list or dictionary. Especially since it doesn't seem like you are doing much with those variables.

I would start by printing team and year right before line 14. That way you will know which line in the data is causing the problem (the last one printed), and you can check that like to make sure it has valid data.

Thank you for your reply.

The column DF has negative values, could that be the issue?


RE: invalid literal for int() with base 10: '' - ichabod801 - Dec-03-2019

(Dec-03-2019, 04:39 PM)mrsenorchuck Wrote: The column DF has negative values, could that be the issue?

No. The error indicates you are getting an empty string somewhere in your data. You might search your data for ',,' (two consecutive commas). However, there could be other ways to get that error. In any case, the print method I mentioned will show you what line the problem is on.


RE: invalid literal for int() with base 10: '' - mrsenorchuck - Dec-03-2019

(Dec-03-2019, 04:53 PM)ichabod801 Wrote:
(Dec-03-2019, 04:39 PM)mrsenorchuck Wrote: The column DF has negative values, could that be the issue?

No. The error indicates you are getting an empty string somewhere in your data. You might search your data for ',,' (two consecutive commas). However, there could be other ways to get that error. In any case, the print method I mentioned will show you what line the problem is on.
Thank you


RE: invalid literal for int() with base 10: '' - markfilan - Apr-29-2020

The error message invalid literal for int() with base 10 would seem to indicate that you are passing a string that's not an integer to the int() function . In other words it's either empty, or has a character in it other than a digit.

You can solve this error by using Python isdigit() method to check whether the value is number or not. The returns True if all the characters are digits, otherwise False .

if val.isdigit():

The other way to overcome this issue is to wrap your code inside a Python try...except block to handle this error.

Python2.x and Python3.x

Sometimes the difference between Python2.x and Python3.x that leads to this ValueError: invalid literal for int() with base 10 .

With Python2.x , int(str(3/2)) gives you "1". With Python3.x , the same gives you ("1.5"): ValueError: invalid literal for int() with base 10: "1.5".