Вопрос

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

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

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
Это было полезно?

Решение

lista = list.sort(lista)

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

lista.sort()

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

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"

? Другими словами, я не знаю, почему вы называете String вещи, которые уже являются Str.

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

Другие советы

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

None[0]

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

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

other_list = sorted(lista)

По этой ссылке https://docs.python.org/2/tutorial/datastructure.html Вы можете прочитать этот метод «сортировать элементы списка на месте». Это означает, что значение результата будет отсортировано, и результат будет на сам по себе. Функция не возвращает нет.

Когда вы назначаете результат «Lista» в строке 14

lista = list.sort(lista)

Вы устанавливаете это ни на что. Это ошибка. Ни у кого не всегда нет данных и не может быть подписано. "TypeError: 'Nonetype' объект не подписан»

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

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

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

list = [v2, v4]

Вы включите этот встроенный список «Список» и получите следующую ошибку:

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)

Как говорилось ранее в одном из ответов, эта ошибка возникает, когда значение списка оказывается пустым. Что ж, хотя и не совсем отношение к этому вопросу, для меня возникла та же ошибка при чтении изображений с использованием OpenCV и Numpy, потому что имя файла было обнаружено отличным от указанным, вероятно, или потому, что рабочий каталог не был указан должным образом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top