webentwicklung-frage-antwort-db.com.de

Python Math - TypeError: Das Objekt 'NoneType' kann nicht subskribiert werden

Ich mache ein kleines Programm für Mathematik (kein bestimmter Grund, wollte es irgendwie) und ich bin auf den Fehler gestoßen "TypeError: 'NoneType' Objekt ist nicht subskribierbar.

Ich habe diesen Fehler noch nie gesehen, daher habe ich keine Ahnung, was er bedeutet.

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)

Der Fehler:

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
25
Nathan Abbott
lista = list.sort(lista)

Das sollte sein

lista.sort()

Die .sort()-Methode ist vorhanden und gibt None zurück. Wenn Sie möchten, dass etwas nicht vorhanden ist, das einen Wert zurückgibt, können Sie es verwenden

sorted_list = sorted(lista)

Neben # 1: Bitte rufen Sie Ihre Listen nicht list auf. Dadurch wird der eingebaute Listentyp blockiert.

Neben Nr. 2: Ich bin nicht sicher, was diese Zeile tun soll:

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

ist es einfach

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

? Mit anderen Worten, ich weiß nicht, warum Sie str für Dinge aufrufen, die bereits str sind.

Neben # 3: manchmal verwenden Sie print("something") (Python 3-Syntax) und manchmal verwenden Sie print "something" (Python 2). Letzteres würde Ihnen einen SyntaxError in py3 geben, also müssen Sie 2. * ausführen. In diesem Fall möchten Sie wahrscheinlich nicht daran gewöhnen, oder Sie werden Tupel drucken, mit zusätzlichen Klammern. Ich gebe zu, dass es hier gut funktioniert, denn wenn nur ein Element in den Klammern steht, wird es nicht als Tupel interpretiert, aber für das Pythonic-Auge sieht es seltsam aus.

31
DSM

Die Ausnahme TypeError: 'NoneType' object is not subscriptable tritt auf, weil der Wert von lista tatsächlich None ist. Sie können TypeError reproduzieren, das Sie in Ihrem Code erhalten, wenn Sie dies in der Python Befehlszeile versuchen:

None[0]

Der Grund dafür, dass lista auf None gesetzt wird, ist, dass der Rückgabewert von list.sort()None... ist und kein sortiertes zurückgibt Kopie der ursprünglichen Liste. Stattdessen wird die Liste, wie in der Dokumentation wird darauf hingewiesen sortiert an Ort und Stelle, anstatt dass eine Kopie erstellt wird (dies ist aus Gründen der Effizienz).

Wenn Sie die ursprüngliche Version nicht ändern möchten, können Sie verwenden

other_list = sorted(lista)
25
aculich

Wie bereits in einer der Antworten erwähnt, tritt dieser Fehler auf, wenn der Wert der Liste leer ist. Obwohl dies für diese Frage nicht vollständig relevant ist, ist derselbe Fehler beim Lesen von Bildern mit opencv und numpy aufgetreten, da der Dateiname sich von dem angegebenen wahrscheinlich unterschied, oder weil das Arbeitsverzeichnis nicht richtig angegeben wurde.

0
ashwinjoseph

Unter diesem Link https://docs.python.org/2/tutorial/datastructures.html können Sie diese Methode lesen "Sortieren der Elemente in der Liste" bedeutet, dass der Ergebniswert aktiviert wird sortiert und das Ergebnis wird auf sich selbst liegen. Die Funktion gibt keine zurück. 

Wenn Sie das Ergebnis in Zeile 14 "lista" zuweisen 

lista = list.sort(lista)

sie setzen den Bereich auf Keine. Das ist der Fehler. Keiner hat immer keine Daten und kann nicht Subskribierbar sein. "TypeError: 'NoneType' Objekt kann nicht subskribiert werden"

um diesen Fehler zu korrigieren (um die Liste zu sortieren), tun Sie dies in Zeile 14:

lista.sort() # this will sort the list in line

Es gibt jedoch noch andere Fehler: In Zeile 18 beim Zuweisen von:

list = [v2, v4]

Sie klopfen diesen eingebauten Typ "Liste" und Sie erhalten die folgende Fehlermeldung:

TypeError: 'list' object is not callable

Um dies zu korrigieren, sagen Sie:

lista2 = [v2, v4]

In Zeile 19 wieder derselbe Fehler wie in Zeile 14. Sortieren Sie die andere Liste:

lista2.sort()

In Zeile 21 versuchen Sie, die Liste der integrierten Typen zu indizieren. Um dies zu korrigieren:

b = lista2[1] = lista2[0]

Damit wird Ihr Code gut laufen. Zum Schluss noch der ganze richtige Code:

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.sort()

a = lista[1] - lista[0]

lista2 = [v2, v4]
lista2.sort()

b = lista2[1] = lista2[0]

print str(a)+str("a")+str(" = ")+str(b)
0
Antonio Peixoto