Je crée un petit programme pour les mathématiques (pas de raison particulière, je voulais plutôt) et j'ai rencontré l'erreur "TypeError: l'objet 'NoneType' n'est pas enregistrable.
Je n'ai jamais vu cette erreur, alors je n'ai aucune idée de ce que cela signifie.
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)
L'erreur:
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)
Cela devrait être
lista.sort()
La méthode .sort()
est en place et renvoie None. Si vous voulez quelque chose qui n’est pas sur place et qui renvoie une valeur, vous pouvez utiliser
sorted_list = sorted(lista)
A part # 1: veuillez ne pas appeler vos listes list
. Cela élimine le type de liste intégré.
À part # 2: Je ne suis pas sûr de ce que cette ligne est censée faire:
print str("value 1a")+str(" + ")+str("value 2")+str(" = ")+str("value 3a ")+str("value 4")+str("\n")
est-ce simplement
print "value 1a + value 2 = value 3a value 4"
? En d'autres termes, je ne sais pas pourquoi vous appelez str des choses qui sont déjà str.
A part # 3: vous utilisez parfois print("something")
(syntaxe Python 3) et parfois print "something"
(Python 2). Ce dernier vous donnerait une syntaxe dans py3, vous devez donc exécuter 2. *, auquel cas vous ne voulez probablement pas prendre l'habitude ou vous allez finir d'imprimer des n-uplets, avec des parenthèses supplémentaires. J'avoue que cela fonctionnera assez bien ici, car s'il n'y a qu'un seul élément dans les parenthèses, ce n'est pas interprété comme un tuple, mais cela semble étrange à l'œil pythonique.
L'exception TypeError: 'NoneType' object is not subscriptable
se produit car la valeur de lista
est en réalité None
. Vous pouvez reproduire TypeError
que vous avez dans votre code si vous essayez ceci avec la ligne de commande Python:
None[0]
La raison pour laquelle lista
est défini sur Aucun, c'est parce que la valeur de retour de list.sort()
est None
... Elle ne pas renvoie une copie triée de la liste d'origine. Comme le indique la documentation , la liste est triée sur place au lieu d'être copiée (ceci pour des raisons d'efficacité).
Si vous ne souhaitez pas modifier la version d'origine, vous pouvez utiliser
other_list = sorted(lista)
Comme indiqué précédemment dans l'une des réponses, cette erreur se produit lorsque la valeur de la liste s'avère être vide. Bien que ce ne soit pas tout à fait pertinent pour cette question, la même erreur s’est produite lors de la lecture d’images en utilisant opencv et numpy car le nom du fichier était différent de celui spécifié probablement ou parce que le répertoire de travail n’avait pas été spécifié correctement.
Sur ce lien https://docs.python.org/2/tutorial/datastructures.html vous pouvez lire cette méthode "Trier les éléments de la liste en place", cela signifie que la valeur du résultat sera triés et le résultat sera sur lui-même. La fonction ne renvoie aucun.
Lorsque vous attribuez le résultat à "lista" à la ligne 14
lista = list.sort(lista)
vous définissez la zone sur None C'est l'erreur. Aucun ne possède toujours pas de données et ne peut pas être Subscriptable. "TypeError: l'objet 'NoneType' n'est pas souscriptable"
pour corriger cette erreur (pour trier la liste), faites ceci à la ligne 14:
lista.sort() # this will sort the list in line
Mais il y a d'autres erreurs: À la ligne 18 lorsque vous attribuez:
list = [v2, v4]
Vous clobez ce type intégré "liste" et vous obtiendrez l'erreur suivante:
TypeError: 'list' object is not callable
Pour corriger cela, dites:
lista2 = [v2, v4]
Toujours à la ligne 19, la même erreur que la ligne 14. Procédez comme suit pour trier l’autre liste:
lista2.sort()
À la ligne 21, vous essayez d’indexer la liste des types intégrés. Pour corriger cela:
b = lista2[1] = lista2[0]
Avec cela, votre code fonctionnera bien. Enfin tout le code correct:
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)