147 votes

Comment sortir d'une clause if

Quelles sont les méthodes permettant de sortir prématurément d'une if clause ?

Il m'arrive parfois d'écrire du code et de vouloir mettre un break à l'intérieur d'une déclaration if pour se rappeler qu'elles ne peuvent être utilisées que pour les boucles.

Prenons l'exemple du code suivant :

if some_condition:
   ...
   if condition_a:
       # do something
       # and then exit the outer if block
   ...
   if condition_b:
       # do something
       # and then exit the outer if block
   # more code here

Je pense à un moyen de le faire : en supposant que les cas de sortie se produisent à l'intérieur d'instructions if imbriquées, envelopper le code restant dans un gros bloc else. Exemple :

if some_condition:
   ...
   if condition_a:
       # do something
       # and then exit the outer if block
   else:
       ...
       if condition_b:
           # do something
           # and then exit the outer if block
       else:
           # more code here

Le problème est qu'un plus grand nombre d'emplacements de sortie signifie plus de code imbriqué/indenté.

Je pourrais également écrire mon code de manière à ce que la fonction if les clauses doivent être aussi réduites que possible et ne pas nécessiter d'issues.

Quelqu'un connaît-il une bonne/meilleure façon de sortir d'une if clause ?

S'il existe des clauses "else-if" et "else" associées, je suppose que la sortie les ignore.

1voto

Romeo Points 32

Je comprends donc que vous essayez de sortir de l'isolement. si bloc de code

if some_condition:
    ...
    if condition_a:
       # do something
       # and then exit the outer if block
       ...
    if condition_b:
       # do something
       # and then exit the outer if block
# more code here

Une solution consiste à tester l'existence d'une fausse condition dans le bloc if extérieur, ce qui permet de sortir implicitement du bloc de code, puis d'utiliser un bloc else pour imbriquer les autres ifs dans faire quelque chose

if test_for_false:
    # Exit the code(which is the outer if code)

else:
    if condition_a:
        # Do something

    if condition_b:
        # Do something

1voto

kerbrose Points 887

La seule chose qui permettrait d'appliquer ce principe sans méthode supplémentaire est la suivante elif comme dans l'exemple suivant

a = ['yearly', 'monthly', 'quartly', 'semiannual', 'monthly', 'quartly', 'semiannual', 'yearly']
# start the condition
if 'monthly' in b: 
    print('monthly') 
elif 'quartly' in b: 
    print('quartly') 
elif 'semiannual' in b: 
    print('semiannual') 
elif 'yearly' in b: 
    print('yearly') 
else: 
    print('final')

1voto

MD. SHIFULLAH Points 21

Il y a plusieurs façons de procéder. Cela dépend de la manière dont le code est mis en œuvre.

Si vous quittez une fonction, utilisez alors return ; aucun code ne sera exécuté après le return ligne de mots-clés. L'exemple de code est donc le suivant :

def func1(a):
    if a > 100:
        # some code, what you want to do
        return a*a 
    if a < 100:
         # some code, what you want to do
        return a-50
    if a == 100:
         # some code, what you want to do
        return a+a

Si vous sortez d'une boucle, utilisez break . Aucun code ne sera exécuté après break mot-clé. L'exemple de code est donc, pour while y for boucles :

a = 1
while (True):
    if (a == 10):
        # some code, what you want to do
        break
    else:
        a=a+1
        print("I am number", a)

for i in range(5):
    if i == 3:
        break
    print(i)

Si vous quittez la conditionnelle de base, vous pouvez utiliser la fonction exit() directement. Ensuite, le code après le exit() ne sera pas exécutée.

NB : Ce type de code n'est pas préférable. Vous pouvez utiliser une fonction à la place. Mais je partage le code à titre d'exemple.

L'exemple de code est le suivant :

if '3K' in FILE_NAME:
        print("This is MODIS 3KM file")
        SDS_NAME = "Optical_Depth_Land_And_Ocean"

    elif 'L2' in FILE_NAME:
        print("This is MODIS 10KM file")
        SDS_NAME = "AOD_550_Dark_Target_Deep_Blue_Combined" 
        exit()
    else:
        print("It is not valid MODIS file")

0voto

Ber Points 10364

Je n'aime pas l'idée de structurer le code de cette manière. Je crains qu'elle ne conduise aux mêmes problèmes que l'utilisation de goto déclarations. (heureusement, Python n'a pas d'instruction goto).

0voto

Sten Techy Points 69

J'ai fait défiler les pages et personne n'a mentionné cette technique. Elle est simple par rapport à d'autres solutions et si vous ne voulez pas utiliser une instruction try-except, c'est peut-être votre meilleure option.

#!/usr/bin/python3
import sys

foo = 56

if (foo != 67):
    print("ERROR: Invalid value for foo")
    sys.exit(1)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X