2012-02-16 14 views
12

Estoy haciendo un pequeño programa de matemática (no hay una razón en particular, simplemente quería) y encontré el error "TypeError: 'NoneType' object is not . subscriptablePython Math - TypeError: el objeto 'NoneType' no es subscriptible

he visto nunca antes este error, así que no tengo idea de lo que significa

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) 

El 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 

Respuesta

21
lista = list.sort(lista) 

Esto debería ser

lista.sort() 

El método .sort() es en el lugar, y devuelve None. Si quieres algo, no en el lugar, que devuelve un valor, se puede usar

sorted_list = sorted(lista) 

Aparte # 1: Por favor no llame a las listas de list. Eso anula el tipo de lista integrada.

Aparte # 2: No estoy seguro de lo que esta línea se pretende hacer:

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

es simplemente

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

? En otras palabras, no sé por qué estás llamando a cosas que ya son str.

Aparte # 3: a veces se usa print("something") (sintaxis de Python 3) y algunas veces se usa print "something" (Python 2). Este último le daría un SyntaxError en py3, por lo que debe ejecutar 2. *, en cuyo caso probablemente no quiera adquirir el hábito o terminará imprimiendo tuplas, con paréntesis adicionales. Tengo que reconocer que va a funcionar bastante bien aquí, porque si hay sólo un elemento entre paréntesis no se interpreta como una tupla, pero parece extraño en el ojo Pythonic ..

+0

Ah, gracias por la aclaración. Además, no llamaré a mi lista de listas en proyectos grandes. Pero esta es simplemente menos de 20 líneas y me sentía poco creativa: P. @ # 2 No estoy seguro de lo que estaba pensando, tal vez pensé que Python intentaría agregar "valor 1a" con "valor 2". Mi error, escribí esto en el medio de una clase ruidosa por cierto. @ # 3: Sí, estoy usando python 2.7 y gracias por el consejo, generalmente trato de usar print (""). –

12

La excepción TypeError: 'NoneType' object is not subscriptable se debe a que el valor de lista es en realidad None. Puede reproducir TypeError que se ponga en su código si se intenta esto en la línea de comandos de Python:

None[0] 

La razón por la que consigue el sistema lista a ninguna es debido a que el valor de retorno de list.sort() es None ... que hace no devolver una copia ordenada de la lista original. En su lugar, como documentation points out, la lista se ordena en el lugar en lugar de una copia que se realiza (esto es por razones de eficiencia).

Si no desea alterar la versión original se puede utilizar

other_list = sorted(lista) 
Cuestiones relacionadas