Python Math-TypeError: объект "NoneType" не является подписываемым

Я делаю небольшую программу для математики (без особой причины, просто хотел), и я столкнулся с ошибкой "TypeError: объект "NoneType" не является подписываемым.

Я никогда раньше не видел этой ошибки, поэтому я понятия не имею, что это значит.

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)

ошибки:

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

4 ответов


lista = list.sort(lista)

это должно быть

lista.sort()

на .sort() метод находится на месте и возвращает None. Если вы хотите что-то не на месте, которое возвращает значение, вы можете использовать

sorted_list = sorted(lista)

в сторону #1: пожалуйста, не называйте ваши списки list. Это ударяет по типу встроенного списка.

в сторону #2: я не уверен, что эта строка должна делать:

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

это просто

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

? Другими словами, Я не знаю, почему вы звоните str о вещах, которые уже есть str.

в сторону #3: Иногда вы используете print("something") (синтаксис Python 3), а иногда вы используете print "something" (Python 2). Последний даст вам SyntaxError в py3, поэтому вы должны запускать 2.* , в этом случае вы, вероятно, не хотите привыкать, или вы закончите печатать кортежи с дополнительными скобками. Я признаю, что здесь он будет работать достаточно хорошо, потому что если в скобках есть только один элемент, он не интерпретируется как кортеж, но выглядит странно глаз питона..


за исключением TypeError: 'NoneType' object is not subscriptable происходит потому, что значение lista на самом деле None. Вы можете воспроизвести TypeError что вы получите в своем коде, если попробуете это в командной строке Python:

None[0]

причина lista получает значение None, потому что возвращаемое значение list.sort() is None... это не возврат отсортированной копии исходного списка. Вместо этого, как документация указывает, список сортируется на месте вместо того, чтобы делать копию (это по соображениям эффективности).

если вы не хотите изменять исходную версию вы можете использовать

other_list = sorted(lista)

по этой ссылке https://docs.python.org/2/tutorial/datastructures.html вы можете прочитать этот метод "Сортировка элементов списка на месте" это означает, что значение результата будет отсортировано и результат будет на себе. Функция возвращает None.

когда вы назначаете результат "lista" в строке 14

lista = list.sort(lista)

вы устанавливаете его в None. Это ошибка. Не всегда имеет данных и не может быть subscriptable. "TypeError: объект 'NoneType' не является subscriptable"

чтобы исправить эту ошибку (для сортировки) этого в строке 14:

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

но есть и другие ошибки: в строке 18 при назначении:

list = [v2, v4]

вы clob это встроенный тип "список", и вы получите следующую ошибку:

TypeError: 'list' object is not callable

чтобы исправить это, сделайте это, скажите:

lista2 = [v2, v4]

снова в строке 19 та же ошибка строки 14. Сделайте это, чтобы отсортировать другой список:

lista2.sort()

в строке 21 Вы пытаются индексировать встроенный список типов. Чтобы исправить это:

b = lista2[1] = lista2[0]

этот код будет работать нормально. Наконец весь правильный код:

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)

на самом деле сообщение об ошибке объект не является subscriptable из-за вас представлены данные, которые не ожидается.

метод сортировки во встроенном вызове из списка itelsef

как lista = lista.sort(lista)

затем выполните необходимые операции