[Python] Erreur de type: résumé des causes et des solutions pour "Aucun type"

[Python] Erreur de type: l'objet 'NoneType' n'est pas itérable Cause et solution

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,,,

Il y a deux conclusions.

** (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.

Statut de l'occurrence

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

## problème Causé en essayant de jouer avec un objet de'NoneType '.

** ▼ 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.

Qu'est-ce que NoneTpye?

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

#### Même dans le cas de l'impression, il devient Aucun Type

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.


### Remède (installation de retour) Afin de ne pas le définir sur NoneType, return donne à la fonction la condition réelle. └ La valeur de retour remplace le résultat de l'exécution de la fonction par 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".

Lieu de retour

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)


▼ OK si le résultat de l'exécution passe par retour

python


def hello(n):
    if n > 2:
        return ("Bonjour")

x = hello(3)
print(type(x))
print(x)

#production
<class 'str'>
Bonjour

## Supplément #### ▼ Le type de la fonction elle-même est fonction

function


def hello():
    print("Bonjour")

print(hello)

#production
<function hello at 0x00000222AE142160>

▼ Les parenthèses ne sont pas requises lors de l'affectation de la fonction elle-même à une variable

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>

▼ Exemple d'exécution de variables (affectation de fonctions)

python


def hello(n):
    if n > 2:
        return ("Bonjour")
    
x= hello
print(x(3))

#production
Bonjour

bonjour () = x ().


## Résultat de l'action Correction du code d'erreur décrit au début.

** 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

[Python] Erreur de type: résumé des causes et des solutions pour "Aucun type"
Résumé des index et des tranches Python
Résumé de la correspondance entre les opérations de tableau ruby et python
Résumé des différences entre PHP et Python
Installation de Python 3 et Flask [Résumé de la construction de l'environnement]
Résumé relatif aux E / S de python et fortran
[Python] Type de classe et utilisation du module datetime
Résumé des arguments Python
Résumé du tri Python (liste, type de dictionnaire, série, DataFrame)
Python - Explication et résumé de l'utilisation des 24 meilleurs packages
Récapitulatif du traitement de la date en Python (datetime et dateutil)
résumé lié à l'opération de fichier python
Résumé des opérations de liste Python3
Python - Vérifiez le type de valeurs
Mémo récapitulatif des types de données Python
Installation source et installation de Python
[python] Résumé de la récupération des listes et des éléments du dictionnaire
[Python] Résumé de l'utilisation des fonctions de fractionnement et de jointure
Résumé de la prise en charge des opérations de hachage (dictionnaire) pour Ruby et Python
Note de prise en charge des erreurs Python: "... ne prend pas en charge l'argument 0 de type float ..."
L'histoire de Python et l'histoire de NaN
Installer SciPy et matplotlib (Python)
Un bref résumé de la collection Python
[python] week1-3: Type de nombre et opération
Ceci et cela des propriétés python
Résumé des différences entre Python et PHP (tableau de comparaison des principaux éléments)
Coexistence de Python2 et 3 avec CircleCI (1.0)
Histoire d'erreur étrange et horrible de Python
Je n'ai plus peur des erreurs! Erreurs Python et leurs causes / solutions
Réputation des livres Python et des livres de référence
[OpenCV; Python] Résumé de la fonction findcontours
[Python] Résumé de la conversion entre les chaînes de caractères et les valeurs numériques (code ascii)
Installation du code Visual Studio et installation de python
[Python] Résumé de l'utilisation des pandas
Extraction de tweet.js (json.loads et eval) (Python)
pix2pix tensorflow2 Enregistrement d'essais et d'erreurs
Résumé de diverses instructions for en Python
Connectez beaucoup de Python ou et et
[Python2.7] Résumé de l'utilisation d'unittest
[python] [meta] Le type de python est-il un type?
Résumé des modules et des classes dans Python-TensorFlow2-
Résumé des méthodes intégrées, etc. de la liste Python
Résumé des techniques utiles de Scrapy en Python
Résumé de l'utilisation de la liste Python
Introduction facile de la série python3 et d'OpenCV3
[Python] Diverses combinaisons de chaînes de caractères et de valeurs
[Python2.7] Résumé de l'utilisation du sous-processus
Héritage entre les types numériques Python et NumPy
Résumé de la spécification des options d'axe de Python "numpy.sum (...)"
Automatisation égale de l'installation de Python et PyPI
Compréhension complète du threading Python et du multitraitement
Résumé de l'analyse des URL et des paramètres de requête Python
[AWS] Résumé des contre-mesures d'erreur d'installation de l'interface de ligne de commande
Projet Euler # 1 "Multiple de 3 et 5" en Python
Résumé Python
[Python] Créer une liste de date et d'heure (type datetime) pour une certaine période
Résumé Python
[Python] Comment utiliser deux types de type ()
Résumé de la façon d'importer des fichiers dans Python 3