J'étais accro à l'écriture d'une fonction récursive, alors comment y faire face.
Erreur survenue
TypeError: 'NoneType' object is not iterable
En plus de ce qui précède, il est également utile pour les causes et les contre-mesures d'erreurs générales, y compris "None Tpye".
Autres exemples d'erreur
・ Ne peut concaténer que la liste(not "NoneType") to list
· Pouvez't multiply sequence by non-int of type 'NoneType'
・ Type d'opérande non pris en charge(s) for +: 'NoneType' and 'list'
Tel,,,
** (1) Le résultat de l'exécution d'une fonction sans valeur de retour est "Valeur Aucune, Type Aucun Type". ** **
** ② Lors de l'affectation d'une fonction à une variable, la fonction doit avoir un retour. ** ** └ Ne pas imprimer. (Parce que ce n'est pas le résultat de l'exécution mais un processus au milieu de l'exécution) └ return doit être la sortie finale de la fonction. └ Il ne suffit pas qu'il y ait un retour quelque part dans la fonction.
Se produit lors de la tentative d'extraire un int d'un tableau multidimensionnel.
Erreur
arr0 = [1,[2],[[3]]]
def number(arr):
result=[]
if isinstance(arr, int):
result.append(arr)
if isinstance(arr, list):
#Extraire les éléments un par un
for brr in arr:
res = number(brr)
result += res #← Voici une erreur
return result
number(arr0)
#production
TypeError: 'NoneType' object is not iterable
** ▼ Un peu plus détaillé ** Le numéro de fonction () est attribué à la variable avec "res = number (brr)", mais comme il n'y a pas de valeur de retour dans cette fonction elle-même, None est stocké dans la variable et le type est NoneType.
"Result + = res" Parce que j'ai essayé de combiner cette variable NoneType res avec le résultat de la variable de type liste.
On dit que res ne peut pas être combiné car il n'est pas itérable.
Une erreur qui se produit lorsqu'aucun argument par défaut n'est passé à la fonction. La valeur est None uniquement.
Qu'est-ce que (python officiel) Aucun La seule valeur de type NoneType. Aucun est souvent utilisé pour indiquer l'absence d'une valeur, par exemple lorsqu'aucun argument par défaut n'a été passé à la fonction. L'affectation à None n'est pas valide et renvoie une SyntaxError.
** ▼ Cela ressemble à ceci ** Lorsque le résultat de l'exécution de la fonction est vide, le résultat lui-même devient NoneType.
Par conséquent, si vous affectez une fonction dont le résultat d'exécution est vide à une variable, elle devient NoneType.
Exemple de NoneTpye
def hello():
pass
x = hello()
print(type(x))
print(x)
#production
<class 'NoneType'>
None
Aucun Type d'impression
def hello():
print("Bonjour")
x = hello()
print(type(x))
#production
Bonjour
<class 'NoneType'>
La sortie est "Hello", mais celle qui est affichée dans le processus d'exécution de la fonction, mais qui ne remplace pas la fonction elle-même.
python
def hello():
return ("Bonjour")
x = hello()
print(type(x))
print(x)
#production
<class 'str'>
Bonjour
x est remplacé par la chaîne "Hello".
Cela ne signifie pas qu'un ou plusieurs retours sont requis dans la fonction. Il est important qu'un retour soit renvoyé comme résultat final de l'exécution.
▼ Un exemple où return est décrit mais devient None Type
Exemple de devenir de type Aucun
def hello(n):
if n > 2:
return ("Bonjour")
x = hello(1)
print(type(x))
print(x)
#production
<class 'NoneType'>
None
Depuis 1 <2, le résultat de sortie de la fonction est vide. (Ne passe pas par le processus de retour)
python
def hello(n):
if n > 2:
return ("Bonjour")
x = hello(3)
print(type(x))
print(x)
#production
<class 'str'>
Bonjour
function
def hello():
print("Bonjour")
print(hello)
#production
<function hello at 0x00000222AE142160>
Attribuer une fonction
def hello():
return ("Bonjour")
x = hello #← Aucune parenthèse requise
print(type(x))
print(x)
#production
<class 'function'>
<function hello at 0x00000222AE1423A0>
python
def hello(n):
if n > 2:
return ("Bonjour")
x= hello
print(x(3))
#production
Bonjour
bonjour () = x ().
** Définissez return de manière appropriée afin que la valeur affectée à la variable ne devienne pas une fonction. ** **
python
def number(arr):
result=[]
if isinstance(arr, int):
result.append(arr)
if isinstance(arr, list):
#Extraire les éléments un par un
for brr in arr:
res = number(brr)
result += res
return result #← Définir le résultat comme valeur de retour du numéro de fonction
Cela a fonctionné en toute sécurité.
Recommended Posts