Sent Successfully.
Home / Blog / Data Science / Python - TypeError – NoneType Object not Subscriptable
Python - TypeError – NoneType Object not Subscriptable
Error!! Error!!! Error!!!! These are common popups we get while executing code, we might feel panic or irritated when we see such errors. But error notifications are actually problem solvers, every error will be identified with the proper error name which helps us to fix the error in the right direction.
Due to COVID-19 lockout, a group of pals who were working on Python together and getting various issues started talking about their errors.
The dialogue between them will now begin.
Ram: Oops!! I just got an error ☹
What error did you get? : Nithin
Ram: I got a None-Type object not subscriptable error!
Oh really, I got the same error too
in yesterday’s task. : Yash
Ram: You were working on a different task but
still you got the same error? Strange!
Oh, is it? how come the same error for different tasks : Yash
So, there is nothing much strange here!
They are an absolute change of getting the same error for different cases.
I have a few examples lets discuss it. : Nitin
TypeError: 'NoneType' object is not subscriptable
The mistake is self-evident. You are attempting to subscript an object that is actually a None.
Example 1
list1=[5,1,2,6] # Create a simple list
order=list1.sort() # sort the elements in created list and store into another variable.
order[0] # Trying to access the first element after sorting
TypeError Traceback (most recent call last)
list1=[5,1,2,6]
order=list1.sort()
----> order[0]
TypeError: 'NoneType' object is not subscriptable
Sort () function returns None due to TypeError: 'NoneType' object is not subscriptable. It affects the source item directly. So you're attempting to slice or subscript the empty None object.
print(order) # Let’s see the data present in the order variable.
None # It’s None
REMEDY
Sort () function returns None due to TypeError: 'NoneType' object is not subscriptable. It affects the source item directly. So you're attempting to slice or subscript the empty None object.Verify whether the returned value is None by looking at it. If it's None, then make appropriate plans for the alternatives.
We are attempting to sort the values in a list in the example above. When sort() is called, the source object is changed without any output being produced. To fix the problem, we might attempt other approaches.
-
either operate on the source directly.
list1=[5,1,2,6] #A simple List
list1.sort() # Sort the elements of source object directly.
list1[0] # Access the first element of the sorted list.
Output: 1 -
or use another method that returns the object with sorted values of the list.
list1=[5,1,2,6] # A simple list created
order=sorted(list1) # Sorting the elements of the above list and store them into another list.
order[0] # Access first element of a new list created.Output: 1
Example 2
list1=[1,2,4,6] # Create a list with a few elements
reverse_order=list1.reverse() # Reverse the order of elements and store into other variable.
reverse_order[0:2] # Access the first two elements after reversing the order.
TypeError Traceback (most recent call last)
in ()
list1=[1,2,4,6]
reverse_order=list1.reverse()
----> reverse_order[0:2]TypeError: 'NoneType' object is not subscriptable
the reverse() method also won't return anything but None, it directly acts upon the source object. So you are trying to slice/subscript the None object which holds no data at all.
print(reverse_order) # Prints the data inside reverse_order
None #It’s None
REMEDYAlways verify whether None is present in the returned values. If it's None, then consider your options carefully.
The items of a list are being attempted to be reversed in the example above. Reverse() does not return anything; instead, it changes the source object. To fix the problem, we might attempt other approaches.
-
Either operate on the source directly.
list1=[1,2,4,6] #A simple list
list1.reverse() # Reverse the order of elements in the above list
list1[0:2] # Accessing the first two elements in a reversed list.Output: [6, 4]
-
Use another method that returns the object with reversed values of the list.
list1=[1,2,4,6] # A list
reverse_order=list(reversed(list1)) # Reversing the order and store into another list.
reverse_order[0:2] # Accessing the first 2 elements of reversed list.Output: [6, 4]
Example 3
Import numpy as np # Import numpy package
def addition(arrays): # A function which performs addition operation
total=arrays.sum(axis=1) # Performing row wise addition in numpy arraya=np.arange(12).reshape(6,2) #Creating a 2D array
total=addition(a) #Calling the function
total[0:4] #Accessing first 4 elements on total
TypeError Traceback (most recent call last)
in () a=np.arange(12).reshape(6,2)
total=addition(a)
----> total[0:4]TypeError: 'NoneType' object is not subscriptable
As we can see, the addition function in this case is not returning anything. The resulting object will yield the aforementioned error when we attempt to subscript it because it contains nothing.
print(total) #print total
NoneREMEDY
Always verify whether None is present in the returned values. If it's None, then consider your options carefully.
In the example above, we're attempting to display the total of a 2D array's row-wise items. To fix the problem, we might attempt other approaches.
-
Either print the sum inside the function directly.
import numpy as np # Import numpy package for mathematical operations
defaddition1(arrays): # Function to perform addition
total1=arrays.sum(axis=1) # Row-wise sum in 2D numpy array
print('row wise sum',total1[0:4]) # Printing first 4 elements of totala=np.arange(12).reshape(6,2) # Creating a 2D array
print('input array \n',a) # Printing a comment
print('*********')
addition1(a) # Calling the functioninput array
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
*********row wise sum [ 1 5 9 13]
-
import numpy as np # Import numpy package
defaddition2(arrays): # Defining a function which performs addition
return total # Returning the suma=np.arange(12).reshape(6,2) # Creating a 2D array
print('input array \n',a)
print('*********')
total2= addition2(a) # Calling the function
print('row wise sum',total2[0:4]) # Printing first 4 elements of totalinput array
[[ 0 1]
[ 2 3]
[ 4 5]
[ 6 7]
[ 8 9]
[10 11]]
*********
row wise sum [ 1 5 9 13]
Example4
import cv2 # Importing opencv package to read the image
import numpy as np # Importing numpy package
import matplotlib.pyplot as plt # Package for visualization
image=cv2.imread('download.jpeg') # Reading the image
plt.imshow(image[65:120]) # Show the part of image
TypeError Traceback (most recent call last)
in ()
importmatplotlib.pyplotasplt
image=cv2.imread('download.jpeg')
----> plt.imshow(image[65:120])TypeError: 'NoneType' object is not subscriptable
Here we are trying to print a cut short of the image. Above error which is coming as OpenCV is unable to read the image
print(image)
NoneREMEDY
Look for the proper path, then fix the image's format. OpenCV won't be able to load the image if the path or image type are incorrect. The picture type is 'jpg' here rather than 'jpeg.'
import cv2 # Import opencv package to read the image
import numpy as np # Numpy package
import matplotlib.pyplot as plt # For visualization
image=cv2.imread('download.jpg') # Reading the image
plt.imshow(image[65:120]) # Showing the part of imageOutput:
Conclusion: We frequently encounter the TypeError issue while attempting to compute across incompatible data types. Anytime we attempt to subscript or slice an empty data object or data of no type, we encounter the TypeError: None-type not subscriptable error.
-
Click here to learn Data Science Course, Data Science Course in Hyderabad, Data Science Course in Bangalore
Data Science Placement Success Story
Data Science Training Institutes in Other Locations
Agra, Ahmedabad, Amritsar, Anand, Anantapur, Bangalore, Bhopal, Bhubaneswar, Chengalpattu, Chennai, Cochin, Dehradun, Malaysia, Dombivli, Durgapur, Ernakulam, Erode, Gandhinagar, Ghaziabad, Gorakhpur, Gwalior, Hebbal, Hyderabad, Jabalpur, Jalandhar, Jammu, Jamshedpur, Jodhpur, Khammam, Kolhapur, Kothrud, Ludhiana, Madurai, Meerut, Mohali, Moradabad, Noida, Pimpri, Pondicherry, Pune, Rajkot, Ranchi, Rohtak, Roorkee, Rourkela, Shimla, Shimoga, Siliguri, Srinagar, Thane, Thiruvananthapuram, Tiruchchirappalli, Trichur, Udaipur, Yelahanka, Andhra Pradesh, Anna Nagar, Bhilai, Borivali, Calicut, Chandigarh, Chromepet, Coimbatore, Dilsukhnagar, ECIL, Faridabad, Greater Warangal, Guduvanchery, Guntur, Gurgaon, Guwahati, Hoodi, Indore, Jaipur, Kalaburagi, Kanpur, Kharadi, Kochi, Kolkata, Kompally, Lucknow, Mangalore, Mumbai, Mysore, Nagpur, Nashik, Navi Mumbai, Patna, Porur, Raipur, Salem, Surat, Thoraipakkam, Trichy, Uppal, Vadodara, Varanasi, Vijayawada, Vizag, Tirunelveli, Aurangabad
Data Analyst Courses in Other Locations
ECIL, Jaipur, Pune, Gurgaon, Salem, Surat, Agra, Ahmedabad, Amritsar, Anand, Anantapur, Andhra Pradesh, Anna Nagar, Aurangabad, Bhilai, Bhopal, Bhubaneswar, Borivali, Calicut, Cochin, Chengalpattu , Dehradun, Dombivli, Durgapur, Ernakulam, Erode, Gandhinagar, Ghaziabad, Gorakhpur, Guduvanchery, Gwalior, Hebbal, Hoodi , Indore, Jabalpur, Jaipur, Jalandhar, Jammu, Jamshedpur, Jodhpur, Kanpur, Khammam, Kochi, Kolhapur, Kolkata, Kothrud, Ludhiana, Madurai, Mangalore, Meerut, Mohali, Moradabad, Pimpri, Pondicherry, Porur, Rajkot, Ranchi, Rohtak, Roorkee, Rourkela, Shimla, Shimoga, Siliguri, Srinagar, Thoraipakkam , Tiruchirappalli, Tirunelveli, Trichur, Trichy, Udaipur, Vijayawada, Vizag, Warangal, Chennai, Coimbatore, Delhi, Dilsukhnagar, Hyderabad, Kalyan, Nagpur, Noida, Thane, Thiruvananthapuram, Uppal, Kompally, Bangalore, Chandigarh, Chromepet, Faridabad, Guntur, Guwahati, Kharadi, Lucknow, Mumbai, Mysore, Nashik, Navi Mumbai, Patna, Pune, Raipur, Vadodara, Varanasi, Yelahanka
Navigate to Address
360DigiTMG - Data Science, IR 4.0, AI, Machine Learning Training in Malaysia
Level 16, 1 Sentral, Jalan Stesen Sentral 5, Kuala Lumpur Sentral, 50470 Kuala Lumpur, Wilayah Persekutuan Kuala Lumpur, Malaysia
+60 19-383 1378