HOWTO · Python

Correction de l'erreur Python Return Outside Function

Comment corriger l'erreur return outside function en Python.

Sur cette page

Si Python signale SyntaxError: 'return' outside function, placez l’instruction return dans le corps d’une fonction. Python rejette un return au niveau du module pendant l’analyse du fichier, avant l’exécution du programme. Vérifiez l’indentation et le bloc def qui l’entoure ; au niveau supérieur, appelez la fonction et utilisez la valeur qu’elle renvoie.

Comprendre l’erreur return outside function

Le mot-clé return renvoie une valeur depuis la fonction en cours vers le code qui l’a appelée. Sur le plan syntaxique, il est valide uniquement dans le corps d’une fonction. Si une instruction return apparaît au niveau du module, Python déclenche une SyntaxError avec le message 'return' outside function.

L’analyseur vérifie tout le fichier avant son exécution. C’est pourquoi un return au niveau supérieur empêche même les instructions précédentes du fichier de s’exécuter. Le message indique la ligne contenant return, mais la cause peut être une instruction mal placée plus loin dans le fichier ou une indentation qui a terminé la fonction plus tôt que prévu. Par exemple, l’instruction invalide return 10 au niveau supérieur produit cette erreur d’analyse :

SyntaxError: ‘return’ outside function

Placer return dans une fonction

Placez l’instruction au même niveau d’indentation que les autres instructions de la fonction. Appelez ensuite cette fonction depuis le code situé au niveau du module. Exécutez cet exemple :

Le code et les libellés ou sorties affichés dans cette section restent en anglais.

def calculate_total(price, quantity):
    return price * quantity

print(calculate_total(8, 3))
24

Ici, return price * quantity appartient à calculate_total, et l’appel transmet 8 et 3 comme arguments. La valeur renvoyée est ensuite transmise à print. Remplacez le calcul et les arguments par les opérations dont votre fonction a besoin.

Une condition ou une boucle ne constitue pas à elle seule une fonction. Vous pouvez utiliser return dans un bloc if, for ou while uniquement si ce bloc se trouve à l’intérieur d’une fonction. L’illustration supplémentaire suivante est syntaxiquement valide, mais elle n’est pas couverte par les éléments d’exécution fournis :

def first_match(items):
    for item in items:
        if item == "target":
            return item
    return None

print(first_match(["other", "target", "later"]))

La ligne return item se trouve à l’intérieur de la fonction et du bloc if. Elle quitte first_match dès qu’un élément correspondant est trouvé ; l’appel transmet donc "target" à print. Si aucun élément ne correspond, le dernier return None est exécuté. Une fonction qui arrive à la fin sans instruction return renvoie également implicitement None.

Vérifier l’indentation et la définition de la fonction

Python se sert de l’indentation pour déterminer quelles instructions appartiennent à une fonction. Une ligne alignée sur def est en dehors de cette fonction ; une ligne indentée en dessous fait partie de son corps. Si vous revenez au niveau supérieur immédiatement après def get_value():, la fonction n’a pas de corps : Python signale alors une erreur d’indentation, et non SyntaxError: 'return' outside function. Pour obtenir l’erreur indiquée, ajoutez d’abord à la fonction une instruction de corps valide, comme pass, puis placez return 5 à la marge de gauche ; cette dernière ligne est alors un return au niveau supérieur. Dans la version corrigée, return 5 reste indenté sous def get_value():. Utilisez une indentation cohérente, généralement de quatre espaces, et examinez les lignes juste au-dessus de l’emplacement signalé pour trouver où le bloc de la fonction se termine.

Vérifiez également que l’en-tête de la fonction est valide et se termine par deux-points. Par exemple, my_function(): est incorrect, car il lui manque def ; Python signale une erreur de syntaxe sur cet en-tête, au lieu de le traiter comme une fonction dont l’instruction return se trouverait hors du corps. Un en-tête mal orthographié ou incomplet peut donc produire un autre message. Corrigez d’abord l’en-tête, puis vérifiez que la ligne return est indentée sous celui-ci. La question essentielle est de savoir si l’instruction se trouve réellement dans le corps d’une fonction.

Appeler une fonction au niveau du module

Le code au niveau du module est la partie d’un fichier Python qui ne se trouve ni dans une fonction ni dans une classe. Il peut appeler une fonction, affecter la valeur renvoyée à une variable, puis afficher ou utiliser cette valeur. Par exemple, écrivez answer = calculate_total(8, 3), puis utilisez answer ; n’écrivez pas return calculate_total(8, 3) au niveau du module.

Pour déboguer, examinez la ligne indiquée par Python et son indentation par rapport au def le plus proche. Si la ligne est déjà indentée, cherchez une désindentation antérieure qui a fermé le corps de la fonction. Si la définition de la fonction est elle-même incorrecte, corrigez cette syntaxe séparément. Une fois que return se trouve dans la fonction prévue, appelez cette fonction depuis le code environnant au niveau du module. La distinction est ainsi claire entre renvoyer une valeur depuis une fonction et utiliser cette valeur dans le reste du programme.