It sounds like you have a mixed list of integers and strings and want to sort by length of the strings. If that is the case, convert the entire list to like types — strings — before sorting.
Given:
>>> li=[1,999,'a','bbbb',0,-3]
You can do:
>>> sorted(map(str, li), key=len)
['1', 'a', '0', '-3', '999', 'bbbb']
If you want a two key sort by length then ascibetible, you can do:
>>> sorted(map(str, li), key=lambda e: (len(e), e))
['0', '1', 'a', '-3', '999', 'bbbb']
You can sort without changing the object type by adding str
to the key function:
>>> sorted(li, key=lambda e: (len(str(e)), str(e)))
[0, 1, 'a', -3, 999, 'bbbb']
In Python, we have a len() function that returns the total number of characters and items present in an iterable object such as string, tuple, dictionary and set. And when we try to perform the len() operation on an integer number, Python raises the error
«TypeError: object of type ‘int’ has no len()».
In this Python tutorial, we will discuss the reason behind this error and learn how to solve it. This Python tutorial also discusses a typical example scenario that demonstrates the
«TypeError: object of type ‘int’ has no len()»
error and its solution, so you could solve the one raising in your Python program. Let’s get started with the Problem statement
The len() is an inbuilt Python function that can accept an iterable object and return an integer number representing the total number of items present in that iterable object.
Example
>>> x = [20, 30, 40, 50]
>>> len(x) #items present in the x
4
But if we try to pass an integer value as an argument to the len() function we receive the Error »
TypeError: object of type ‘int’ has no len()
«.
Example
#integer number
num = 300
length = len(num)
print(length)
Output
Traceback (most recent call last):
File "main.py", line 4, in
length = len(num)
TypeError: object of type 'int' has no len()
In the above example, we are receiving the error because we are passing the
num
as an argument value to the len() function. And len() function return the error when an integer object or value is passed to it. The error statement has two sub statements separated with colon :
- TypeError
- object of type ‘int’ has no len()
1. TypeError
The TypeError is a standard Python exception. It is raised in a Python program when we try to perform an invalid operation on a Python object or when we pass an invalid data type to a function. In the above example, Python is raising the TypeError because the
len()
function expecting an iterable object data type and it received an int.
2. object of type ‘int’ has no len()
The statement »
object of type 'int' has no len()
» is the error message, that tag along with the TypeError exception. This message is putting the fact that the length function does not support the int value as an argument. This simply means we can not compute the length of an integer value using len() function.
Common Example Scenario
Many new Python learners are unaware of the fact that len() function can not operate on the int data type. And often they perform it on the integer object to get the total length or number of digits and encounter the error.
Example
Suppose we need to write
a program
that asks the user to enter a 4 digit number for the passcode. And we need to check if the entered number contains 4 digits or not.
passcode = int(input("Enter a 4 Digit Number: "))
#length of the passcode
length = len(passcode)
if length == 4:
print("Your Entered Passcode is", passcode)
else:
print("Please only enter a 4 digit passcode")
Output
Enter a 4 Digit Number: 2342
Traceback (most recent call last):
File "main.py", line 4, in
length = len(passcode)
TypeError: object of type 'int' has no len()
Break the code
In this example, we are getting the error with
length = len(passcode)
statement. This is because the
passcode
is an integer value, and len() function does not support int data values as an argument.
Solution
In the above example, our objective is to find the number of digits entered by the user. That can be found by the total length of the entered number. To solve the above problem we need to ensure that we are not passing the int value to the len() function. The input function accepts the entered passcode as a string, and we need to find the length for that entered string value. After getting the length we can convert that value to the int type.
passcode = input("Enter a 4 Digit Number: ")
#length of the passcode
length = len(passcode)
#covert the passcode into int
passcode = int(passcode)
if length == 4:
print("Your Entered Passcode is", passcode)
else:
print("Please only enter a 4 digit passcode")
Output
Enter a 4 Digit Number: 4524
Your Entered Passcode is 4524
Now our code run successfully
Conclusion
The
» TypeError: object of type ‘int’ has no len()»
is a common error that many Python learners encounter when they accidentally pass an integer number to the len() function. To solve this problem we need to take care of the len() function and make sure that we are only passing an iterable object to it not a specific integer number.
In this article, we have discussed this error in detail and also solve a common example.
If you still getting this error in your Python program, please share your code and query in the comment section. We will try to help you in debugging.
People are also reading:
-
Python List or Array
-
Recursion in Python
-
Python vs JavaScript
-
Number, Type Conversion and Mathematics in Python
-
Python Interview Questions
-
Python Uppercase
-
List append vs extend method in Python
-
Python Remove Key from a Dictionary
-
Python COPY File and Directory Using shutil
-
Replace Item in Python List
This error occurs when you pass an integer to a len()
function call. Integers are whole numbers without decimals. In Python, numerical values do not have a length.
You can solve the error by only passing iterable objects to the len()
function. For example, you can pass an integer to a range()
function call to get a range object, which is iterable and has a length. For example,
my_int = 5 rng = range(my_int) print(len(rng))
This tutorial will go through the error and how to solve it with code examples.
Table of contents
- TypeError: object of type ‘int’ has no len()
- Example
- Solution
- Summary
TypeError: object of type ‘int’ has no len()
We raise a Python TypeError when attempting to perform an illegal operation for a specific type. In this case, the type is int
.
The part ‘has no len()
‘ tells us the map object does not have a length, and therefore len()
is an illegal operation for the int
object.
Retrieving the length of an object is only suitable for iterable objects, like a list
or a tuple
.
An integer is a whole number, that can be positive or negative, without decimals and of unlimited length.
The len()
method implicitly calls the dunder method __len__()
which returns a positive integer representing the length of the object on which it is called. All iterable objects have __len__
as an attribute. Let’s check if __len__
is in the list of attributes for an int
object and a list
object using the built-in dir()
method.
my_int = 4 print(type(my_int)) print('__len__' in dir(my_int))
<class 'int'> False
We can see that __len__
is not present in the attributes of the int
object.
lst = ["Einstein", "Feynman", "Dirac"] print(type(lst)) print('__len__' in dir(lst))
<class 'list'> True
We can see that __len__
is present in the attributes of the list
object.
Example
Let’s look at an example of trying to get the length of an int
object. First, we will define a function that counts the number of cakes in a list of baked goods provided by a bakery.
def get_total_cakes(bakery_list): cake_count = sum(map(lambda x: "cake" in x, bakery_list)) print(f'Number of cakes in shop: {len(cake_count)}')
Next, we will define the list of baked goods to pass to the function call.
baked_goods = ['chocolate cake', 'baklava', 'genoise cake', 'chiffon cake', 'brownie', 'strawberry crumble', 'angel food cake']
Next, we will call the get_total_cakes()
function to get the number of cakes in the list:
get_total_cakes(baked_goods)
Let’s run the code to see what happens:
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Input In [15], in <cell line: 3>() 1 baked_goods = ['chocolate cake', 'baklava', 'genoise cake', 'chiffon cake', 'brownie', 'strawberry crumble', 'angel food cake'] ----> 3 get_total_cakes(baked_goods) Input In [14], in get_total_cakes(bakery_list) 1 def get_total_cakes(bakery_list): 2 cake_count = sum(map(lambda x: "cake" in x, bakery_list)) ----> 3 print(f'Number of cakes in shop: {len(cake_count)}') TypeError: object of type 'int' has no len()
The error occurs because the cake_count
variable is an integer. The combination of sum()
and map()
counts the elements in a list by a specified condition and returns an integer. Therefore, when we try to get the length of cake_count
using len()
, we are trying to get the length of an integer.
We can check the type of an object by using the built-in type() function:
baked_goods = ['chocolate cake', 'baklava', 'genoise cake', 'chiffon cake', 'brownie', 'strawberry crumble', 'angel food cake'] cake_count = sum(map(lambda x: "cake" in x, baked_goods)) print(type(cake_count))
<class 'int'>
Solution
We can solve this error by removing the len()
function call in the print statement. Let’s look at the revised code:
def get_total_cakes(bakery_list): cake_count = sum(map(lambda x: "cake" in x, bakery_list)) print(f'Number of cakes in shop: {cake_count}')
Let’s define the list of baked goods and pass the list to the get_total_cakes()
function call.
baked_goods = ['chocolate cake', 'baklava', 'genoise cake', 'chiffon cake', 'brownie', 'strawberry crumble', 'angel food cake'] get_total_cakes(baked_goods)
Let’s run the code to get the number of cakes.
Number of cakes in shop: 4
Summary
Congratulations on reading to the end of this tutorial!
For further reading on the has no len()
TypeErrors, go to the article:
- How to Solve Python TypeError: object of type ‘builtin_function_or_method’ has no len()
- How to Solve Python TypeError: object of type ‘filter’ has no len()
- How to Solve Python TypeError: object of type ‘float’ has no len()
To learn more about Python for data science and machine learning, go to the online courses page on Python, which provides the best, easy-to-use online courses.
In python, the error “TypeError: object of type ‘int’ has no len()” occurs when the length function is invoked on objects that does not support the length function. The length function is supported by iterable objects such as list, tuple, dictionary and string.
The length function is used to find the length of the string or the number of objects in a structured objects such as list, tuple and dictionary. The length function does not supported by the data types such as int, float, long, boolean, complex data types. If the length function is invoked on unsupported objects, the python interpreter will cause the error.
The purpose of the len() function is to determine the length of the list, tuple, dictation, or string. In this article, we can see what this error is, how this error can be resolved. The error would be thrown as like below.
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 2, in <module>
print (len(s))
TypeError: object of type 'int' has no len()
[Finished in 0.2s with exit code 1]
Different Variation of the error
In different contexts the “TypeError: object of type ‘int’ has no len()” error is thrown in various forms in python. The numerous variations of TypeError are shown below.
TypeError: object of type 'NoneType' has no len()
TypeError: object of type 'int' has no len()
TypeError: object of type 'float' has no len()
TypeError: object of type 'long' has no len()
TypeError: object of type 'bool' has no len()
TypeError: object of type 'complex' has no len()
TypeError: object of type 'type' has no len()
TypeError: object of type 'builtin_function_or_method' has no len()
Root Cause
The root cause of this error is that the len() function is invoked on objects that are not supported to calculate the length. Iterable objects such as list, tuple, dictionary, and strings are supported to find the length of the elements in it.
The len() function does not make sense for types such as integer, float, boolean, long, complex. The Python interpreter will throw this error when the len() function is invoked on this.
How to reproduce this error
If the len() function is invoked for the unsupported objects such as int, float, boolean, long etc, this error will be thrown. calling the len() function for the unsupported objects to reproduce this error “TypeError: object of type ‘int’ has no len()” in python.
s=5
print (len(s))
Output
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 2, in <module>
print (len(s))
TypeError: object of type 'int' has no len()
[Finished in 0.2s with exit code 1]
Solution 1
The len() function should only be used for iterable objects such as list, tuple, dictionary and string. Make sure you return any of the objects. Changing the primary data types to the iterable objects will resolve this error “TypeError: object of type ‘int’ has no len()” in python.
s = [5,4]
print (len(s))
Output
2
Solution 2
The len() function must be called before checking the object type. If the object is an iterable object, such as a list, tuple, dictionary, or string, the len() function will be called. Otherwise the error message “TypeError: object of type ‘int’ has no len()” will be shown to the user that the length of the object can not be found.
s=[2]
print type(s)
if type(s) in (list,tuple,dict, str):
print (len(s))
else:
print "not a list"
Output
1
Solution 3
The length can not be determined if the argument for the len() function is None. The value of the argument must be checked for non-None before calling the len() function. The error message “TypeError: object of type ‘NoneType’ has no len()” will be shown as in the example below.
s=None
print (len(s))
Output
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 2, in <module>
print (len(s))
TypeError: object of type 'NoneType' has no len()
[Finished in 0.1s with exit code 1]
Solution
s=None
print type(s)
if s is None :
print "a None value"
else:
print (len(s))
Output
a None value
Solution 4
The length can not be determined if the argument for the len() function is a python type. The value of the argument must be checked for type before calling the len() function or default value is set. The error message “TypeError: object of type ‘type’ has no len()” will be shown as in the example below.
s=list
print len(s)
Output
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 2, in <module>
print len(s)
TypeError: object of type 'type' has no len()
[Finished in 0.0s with exit code 1]
Solution
s=list()
print len(s)
Output
0
Solution 5
The length can not be determined if the argument for the len() function is a python build in function. The value of the argument must be checked before calling the len() function. The error message will be shown as in the example below.
s=len
print len(s)
Output
Traceback (most recent call last):
File "/Users/python/Desktop/test.py", line 2, in <module>
print len(s)
TypeError: object of type 'builtin_function_or_method' has no len()
[Finished in 0.1s with exit code 1]
Solution
s=(2,3)
print len(s)
Output
2
In this article, we will learn about the TypeError: object of type ‘int’ has no len.
What is TypeError: object of type ‘int’ has no len?
This error is generated when we try to calculate the length of an integer value. But integer don’t have any length. Thus the error is raised.
Let us understand it more with the help of an example.
Example
# Importing random module
import random
# Using randit function of random module
var = random.randint(0, 20)
# Printing Random value
print("Random value: ",var)
# Printing length of variable
print("Length of variable: ",len(var))
Output
Random value: 18
File "len.py", line 12, in <module>
print("Length of variable: ",len(var))
TypeError: object of type 'int' has no len()
Explanation
In the above example, we imported the random module of python. There are various function available in random module of python. In this particular code, we used the randint() function. This function returns any random integer within the specified parameter value.
After generating the random integer we stored it in the variable ‘var’. And printed it in the next line. There’s no error encountered until now. But when we try to try to calculate the length of the variable ‘var’ in line-12 of the code. An error is encountered. This TypeError is raised because we were trying to calculate the length of an integer. And we know integers don’t have any length.
Solution
# Importing random module
import random
# Using randit(start,end) function of random module
var = random.randint(0, 20)
# Printing Random value
print("Random value: ",var)
# Printing length of variable
print("Length of variable: ",len(str(var)))
Output
Random value: 2
Length of variable: 1
Explanation
As discussed earlier we can not calculate the length of an integer. But we can calculate the length of the string. So what we can do is, change the integer value to the string. And then calculate the length of that string.
Here we used a built-in function str() to change ‘var’ to string.
Conclusion
This TypeError is raised when we try to calculate the length of an integer using len(). To work around this error we can convert the integer value to string. And then calculate the length of the string.