Frage

Ich mache ein kleines Programm für Mathematik (kein besonderer Grund, nur irgendwie wollte) und ich bin auf den Fehler "TypeError: 'Nicht -Einsatz' -Objekt ist nicht einweisbar.

Ich habe diesen Fehler noch nie gesehen, also habe ich keine Ahnung, was es 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
War es hilfreich?

Lösung

lista = list.sort(lista)

Das sollte sein

lista.sort()

Das .sort() Die Methode ist ein Ort und gibt keine zurück. Wenn Sie etwas nicht an Ort finden möchten, was einen Wert zurückgibt, können Sie verwenden

sorted_list = sorted(lista)

Neben #1: Bitte rufen Sie Ihre Listen nicht an list. Das kräuselt den integrierten Listentyp.

Abgesehen von #2: Ich bin mir 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 auf Dingen anrufen, die bereits str.

Beiseite #3: Manchmal benutzt du print("something") (Python 3 -Syntax) und manchmal verwenden Sie print "something" (Python 2). Letzteres würde Ihnen eine SyntaxEerror in PY3 geben, also müssen Sie 2.*, in diesem Fall möchten Sie wahrscheinlich nicht an die Gewohnheit kommen, oder Sie werden Tupel mit zusätzlichen Klammern drucken. Ich gebe zu, dass es hier gut genug funktioniert, denn wenn es nur ein Element in den Klammern gibt, wird es nicht als Tupel interpretiert, aber es sieht für das pythonische Auge seltsam aus.

Andere Tipps

Die Ausnahme TypeError: 'NoneType' object is not subscriptable passiert, weil der Wert von lista ist eigentlich None. Sie können sich reproduzieren TypeError Sie erhalten in Ihrem Code, wenn Sie dies in der Befehlszeile der Python versuchen:

None[0]

Der Grund dass lista wird auf keine festgelegt, liegt daran, dass der Rückgabewert von list.sort() ist None... es tut nicht Geben Sie eine sortierte Kopie der Originalliste zurück. Stattdessen wie das Dokumentation weist darauf hin, die Liste wird sortiert an Ort und Stelle Anstelle einer Kopie (dies ist aus Effizienzgründen).

Wenn Sie die Originalversion nicht ändern möchten, die Sie verwenden können

other_list = sorted(lista)

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

Wenn Sie das Ergebnis "Lista" in Zeile 14 zuweisen

lista = list.sort(lista)

Sie Bereich setzen es auf keine. Das ist der Fehler. Keiner hat immer keine Daten und kann nicht einweisbar sein. "TypeError: 'Nonetype' Objekt ist nicht einweisbar"

Um diesen Fehler zu korrigieren (zur Sortierung der Liste), tun Sie dies in Zeile 14:

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

Es gibt jedoch einige andere Fehler: in Zeile 18, wenn Sie zuweisen:

list = [v2, v4]

Sie gruppieren diesen integrierten Typ "Liste" und erhalten den folgenden Fehler:

TypeError: 'list' object is not callable

Um das zu korrigieren, sagen Sie: sagen:

lista2 = [v2, v4]

Wieder in Zeile 19 der gleiche Fehler von Zeile 14. Tun Sie dies, um die andere Liste zu sortieren:

lista2.sort()

In Zeile 21 versuchen Sie, die integrierte Typliste in den Typen zu indexieren. Um dies zu korrigieren:

b = lista2[1] = lista2[0]

Damit läuft Ihr Code gut. Schließlich der gesamte 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)

Wie bereits in einer der Antworten erwähnt, tritt dieser Fehler auf, wenn sich der Wert der Liste als leer herausstellt. Obwohl dies für diese Frage nicht voll relevant ist, trat der gleiche Fehler für mich beim Lesen von Bildern mit OpenCV und Numpy auf, da sich der Dateiname als anders als der angegebene oder weil das Arbeitsverzeichnis nicht ordnungsgemäß angegeben hat.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top