ValueError: invalid literal for int() with base 10: ''

PythonValueerror

Python Problem Overview


Why do I get this error?

> ValueError: invalid literal for int() with base 10: ''.

Python Solutions


Solution 1 - Python

The end of the error shows the value that was tried to be parsed.

As a more clear example.

>>> int('55063.000000')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '55063.000000'

In your case, you tried to parse an empty string as an integer.

For the above float example, it needs converted twice.

>>> int(float('55063.000000'))
55063

Solution 2 - Python

The following are totally acceptable in python:

  • passing a string representation of an integer into int
  • passing a string representation of a float into float
  • passing a string representation of an integer into float
  • passing a float into int
  • passing an integer into float

But you get a ValueError if you pass a string representation of a float into int, or a string representation of anything but an integer (including empty string). If you do want to pass a string representation of a float to an int, as @katyhuff points out above, you can convert to a float first, then to an integer:

>>> int('5')
5
>>> float('5.0')
5.0
>>> float('5')
5.0
>>> int(5.0)
5
>>> float(5)
5.0
>>> int('5.0')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '5.0'
>>> int(float('5.0'))
5

Solution 3 - Python

Pythonic way of iterating over a file and converting to int:

for line in open(fname):
   if line.strip():           # line contains eol character(s)
       n = int(line)          # assuming single integer on each line

What you're trying to do is slightly more complicated, but still not straight-forward:

h = open(fname)
for line in h:
    if line.strip():
        [int(next(h).strip()) for _ in range(4)]     # list of integers

This way it processes 5 lines at the time. Use h.next() instead of next(h) prior to Python 2.6.

The reason you had ValueError is because int cannot convert an empty string to the integer. In this case you'd need to either check the content of the string before conversion, or except an error:

try:
   int('')
except ValueError:
   pass      # or whatever

Solution 4 - Python

I found a work around. Python will convert the number to a float. Simply calling float first then converting that to an int will work: output = int(float(input))

Solution 5 - Python

The reason is that you are getting an empty string or a string as an argument into int. Check if it is empty or it contains alpha characters. If it contains characters, then simply ignore that part.

Solution 6 - Python

The reason you are getting this error is that you are trying to convert a space character to an integer, which is totally impossible and restricted.And that's why you are getting this error.enter image description here

Check your code and correct it, it will work fine

Solution 7 - Python

So if you have

floatInString = '5.0'

You can convert it to int with floatInInt = int(float(floatInString))

Solution 8 - Python

You've got a problem with this line:

while file_to_read != " ":

This does not find an empty string. It finds a string consisting of one space. Presumably this is not what you are looking for.

Listen to everyone else's advice. This is not very idiomatic python code, and would be much clearer if you iterate over the file directly, but I think this problem is worth noting as well.

Solution 9 - Python

Please test this function (split()) on a simple file. I was facing the same issue and found that it was because split() was not written properly (exception handling).

Solution 10 - Python

I recently came across a case where none of these answers worked. I encountered CSV data where there were null bytes mixed in with the data, and those null bytes did not get stripped. So, my numeric string, after stripping, consisted of bytes like this:

\x00\x31\x00\x0d\x00

To counter this, I did:

countStr = fields[3].replace('\x00', '').strip()
count = int(countStr)

...where fields is a list of csv values resulting from splitting the line.

Solution 11 - Python

    readings = (infile.readline())
    print readings
    while readings != 0:
        global count
        readings = int(readings)

There's a problem with that code. readings is a new line read from the file - it's a string. Therefore you should not compare it to 0. Further, you can't just convert it to an integer unless you're sure it's indeed one. For example, empty lines will produce errors here (as you've surely found out).

And why do you need the global count? That's most certainly bad design in Python.

Solution 12 - Python

This could also happen when you have to map space separated integers to a list but you enter the integers line by line using the .input(). Like for example I was solving this problem on HackerRank Bon-Appetit, and the got the following error while compiling enter image description here

So instead of giving input to the program line by line try to map the space separated integers into a list using the map() method.

Solution 13 - Python

your answer is throwing errors because of this line

readings = int(readings)
  1. Here you are trying to convert a string into int type which is not base-10. you can convert a string into int only if it is base-10 otherwise it will throw ValueError, stating invalid literal for int() with base 10.

Solution 14 - Python

My simple workaround to this problem was wrap my code in an if statement, taking advantage of the fact that an empty string is not "truthy":

Given either of these two inputs:

input_string = ""    # works with an empty string
input_string = "25"  # or a number inside a string

You can safely handle a blank string using this check:

if input_string:
   number = int(input_string)
else:
   number = None # (or number = 0 if you prefer)

print(number)

Solution 15 - Python

> I am creating a program that reads a > file and if the first line of the file > is not blank, it reads the next four > lines. Calculations are performed on > those lines and then the next line is > read.

Something like this should work:

for line in infile:
    next_lines = []
    if line.strip():
        for i in xrange(4):
            try:
                next_lines.append(infile.next())
            except StopIteration:
                break
    # Do your calculation with "4 lines" here

   

Solution 16 - Python

This seems like readings is sometimes an empty string and obviously an error crops up. You can add an extra check to your while loop before the int(readings) command like:

while readings != 0 or readings != '':
    readings = int(readings)

Solution 17 - Python

Another answer in case all of the above solutions are not working for you.

My original error was similar to OP: ValueError: invalid literal for int() with base 10: '52,002'

I then tried the accepted answer and got this error: ValueError: could not convert string to float: '52,002' --this was when I tried the int(float(variable_name))

My solution is to convert the string to a float and leave it there. I just needed to check to see if the string was a numeric value so I can handle it correctly.

try: 
   float(variable_name)
except ValueError:
   print("The value you entered was not a number, please enter a different number")

Solution 18 - Python

I faced this error in Django - Once in my models I had a DateTimeField() with some saved objects on it. then when I changed the field to DateField().

To solve this; I simply edited my Database(db.sqlite3) as I changed the date value from this format 2021-08-09 13:05:45 to this 2021-08-09, And that was all.

Solution 19 - Python

I was getting similar errors, turns out that the dataset had blank values which python could not convert to integer.

Solution 20 - Python

I got into the same issue when trying to use readlines() inside for loop for same file object... My suspicion is firing readling() inside readline() for same file object caused this error.

Best solution can be use seek(0) to reset file pointer or Handle condition with setting some flag then create new object for same file by checking set condition....

Solution 21 - Python

I had hard time figuring out the actual reason, it happens when we dont read properly from file. you need to open file and read with readlines() method as below:

with open('/content/drive/pre-processed-users1.1.tsv') as f:
    file=f.readlines()

It corrects the formatted output

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionSarah CoxView Question on Stackoverflow
Solution 1 - PythonFdoBadView Answer on Stackoverflow
Solution 2 - PythonPeterView Answer on Stackoverflow
Solution 3 - PythonSilentGhostView Answer on Stackoverflow
Solution 4 - PythonBrad123View Answer on Stackoverflow
Solution 5 - Pythonrajender kumarView Answer on Stackoverflow
Solution 6 - PythonJoishView Answer on Stackoverflow
Solution 7 - PythonHrvojeView Answer on Stackoverflow
Solution 8 - PythonjcdyerView Answer on Stackoverflow
Solution 9 - Pythonuser3446207View Answer on Stackoverflow
Solution 10 - PythonT. ReedView Answer on Stackoverflow
Solution 11 - PythonEli BenderskyView Answer on Stackoverflow
Solution 12 - PythonAmit KumarView Answer on Stackoverflow
Solution 13 - PythonshubhamView Answer on Stackoverflow
Solution 14 - PythonAllen EllisView Answer on Stackoverflow
Solution 15 - PythonImranView Answer on Stackoverflow
Solution 16 - PythonKanishk MairView Answer on Stackoverflow
Solution 17 - Pythonjustanotherdev2View Answer on Stackoverflow
Solution 18 - PythonAli ArefView Answer on Stackoverflow
Solution 19 - Pythonuser2162611View Answer on Stackoverflow
Solution 20 - PythonAbhishek JainView Answer on Stackoverflow
Solution 21 - PythonShaina RazaView Answer on Stackoverflow