Skip to content Skip to sidebar Skip to footer

What Does "Type Error: Can't Convert 'int' To Str Implicitly" Mean?

def display_positive_indices(strlen): print() print(' ', end='') for i in range(strlen + 1): print(i, end='') if i != strlen: print(' ' * (4

Solution 1:

Your function works fine if you call it with an integer, such as:

In [499]: display_positive_indices(3)

 0   1   2   3

But when you call it with a string, you get this error, and the interpreter tells you more information:

In [500]: display_positive_indices('3')

 ---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-500-dd39f751056c> in <module>()
----> 1 display_positive_indices('3')

<ipython-input-495-ac7e32dd0c50> in display_positive_indices(strlen)
      2     print()
      3     print(' ', end='')
----> 4     for i in range(strlen + 1):
      5         print(i, end='')
      6         if i != strlen:

TypeError: Can't convert 'int' object to str implicitly

The problem is that strlen + 1. You're trying to add a str to an int. You get the exact same error with just this:

In [501]: strlen = '3'

In [502]: strlen + 1
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-502-5a3ed0dba868> in <module>()
----> 1 strlen + 1

TypeError: Can't convert 'int' object to str implicitly

In Python 3, trying to add something to a str starts off by trying to implicitly convert that other thing to a str, and, as the error says, you can't do that with an int.

Meanwhile, for future reference, here's how to debug an error like this:

To start off with, you know which line in your function has the error. So, keep removing stuff until the error goes away. First:

def display_positive_indices(strlen):
    for i in range(strlen + 1):
        pass

Same error. So:

def display_positive_indices(strlen):
    range(strlen + 1)

And again:

def display_positive_indices(strlen):
    strlen + 1

And:

def display_positive_indices(strlen):
    strlen

OK, that last one succeeded, so the problem was in strlen + 1. Everything else is irrelevant. So, you've narrowed down what you have to figure out, ask about, and/or understand.

Finally, if you want us to figure out what's wrong with the main function, and why it's passing a str rather than the int you expected, you'll have to show us that function. (Of the top of my head, my first guess is that you're using input to get a length from the user, and not converting it, possibly because you read the Python 2 docs on input instead of the Python 3 docs. But I'd give that guess a 20% chance of being right at best.)


Solution 2:

Since you require an integer you can coerce it to the type you would like, and if it cannot be converted you will get a TypeError or ValueError:

...
strlen = int(strlen)
for i in range(strlen + 1):
    ...

Post a Comment for "What Does "Type Error: Can't Convert 'int' To Str Implicitly" Mean?"