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 - lista list = [v2, v4] list = list.sort(list) b = list = list print str(a)+str("a")+str(" = ")+str(b)
Traceback (most recent call last): File "C:/Users/Nathan/Documents/Python/New thing", line 16, in <module> a = lista - lista TypeError: 'NoneType' object is not subscriptable
lista = list.sort(lista)
This should be
.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..
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:
The reason that
lista gets set to None is because the return value of
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)