Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Math - TypeError: 'NoneType' object is not subscriptable

I'm making a small program for math (no particular reason, just kind of wanted to) and I ran into the error "TypeError: 'NoneType' object is not subscriptable.

I have never before seen this error, so I have no idea what it means.

import math  print("The format you should consider:") print str("value 1a")+str(" + ")+str("value 2")+str(" = ")+str("value 3a ")+str("value 4")+str("\n")  print("Do not include the letters in the input, it automatically adds them")  v1 = input("Value 1: ") v2 = input("Value 2: ") v3 = input("Value 3: ") v4 = input("Value 4: ")  lista = [v1, v3] lista = list.sort(lista)  a = lista[1] - lista[0]  list = [v2, v4] list = list.sort(list)  b = list[1] = list[0]  print str(a)+str("a")+str(" = ")+str(b) 

The error:

Traceback (most recent call last):   File "C:/Users/Nathan/Documents/Python/New thing", line 16, in <module>     a = lista[1] - lista[0] TypeError: 'NoneType' object is not subscriptable 
like image 842
Fen Avatar asked Feb 16 '12 23:02

Fen


People also ask

Why is NoneType object not Subscriptable?

The error, NoneType object is not subscriptable, means that you were trying to subscript a NoneType object. This resulted in a type error. 'NoneType' object is not subscriptable is the one thrown by python when you use the square bracket notation object[key] where an object doesn't define the __getitem__ method.

How do I fix NoneType errors in Python?

The error “TypeError: 'NoneType' object is not iterable” occurs when you try to iterate over a NoneType object. Objects like list, tuple, and string are iterables, but not None. To solve this error, ensure you assign any values you want to iterate over to an iterable object.

How do you fix an object is not Subscriptable in Python?

The TypeError: 'int' object is not subscriptable error occurs if we try to index or slice the integer as if it is a subscriptable object like list, dict, or string objects. The issue can be resolved by removing any indexing or slicing to access the values of the integer object.

What is NoneType object in Python?

The None keyword is used to define a null value, or no value at all. None is not the same as 0, False, or an empty string. None is a data type of its own (NoneType) and only None can be None.


2 Answers

lista = list.sort(lista) 

This should be

lista.sort() 

The .sort() method is in-place, and returns None. If you want something not in-place, which returns a value, you could use

sorted_list = sorted(lista) 

Aside #1: please don't call your lists list. That clobbers the builtin list type.

Aside #2: I'm not sure what this line is meant to do:

print str("value 1a")+str(" + ")+str("value 2")+str(" = ")+str("value 3a ")+str("value 4")+str("\n") 

is it simply

print "value 1a + value 2 = value 3a value 4" 

? In other words, I don't know why you're calling str on things which are already str.

Aside #3: sometimes you use print("something") (Python 3 syntax) and sometimes you use print "something" (Python 2). The latter would give you a SyntaxError in py3, so you must be running 2.*, in which case you probably don't want to get in the habit or you'll wind up printing tuples, with extra parentheses. I admit that it'll work well enough here, because if there's only one element in the parentheses it's not interpreted as a tuple, but it looks strange to the pythonic eye..

like image 184
DSM Avatar answered Sep 30 '22 08:09

DSM


The exception TypeError: 'NoneType' object is not subscriptable happens because the value of lista is actually None. You can reproduce TypeError that you get in your code if you try this at the Python command line:

None[0] 

The reason that lista gets set to None is because the return value of list.sort() is None... it does not return a sorted copy of the original list. Instead, as the documentation points out, the list gets sorted in-place instead of a copy being made (this is for efficiency reasons).

If you do not want to alter the original version you can use

other_list = sorted(lista) 
like image 31
aculich Avatar answered Sep 30 '22 09:09

aculich