2017-08-24 4 views
0

Je suis encore un novice en Python, donc je m'excuse si c'est une question novice. J'ai ce morceau de code dans mon programme.En utilisant Python, comment puis-je essayer - à l'exception de quelques entrées différentes dans une seule fonction, où en cas d'échec, les autres sont traités?

entryBox1 = "not a number" 
entryBox2 = 27 
def setValues(): 
    content = entryBox1.get() 
    if content != "": 
      try: 
        int(content) 
        currentValuePumpOn.set(content) 
      except ValueError: 
       return 
    content = entryBox2.get() 
    if content != "": 
      try: 
        int(content) 
        currentValuePumpOff.set(content) 
      except ValueError: 
       return 
    entryBox1.delete(0, 99) 
    entryBox2.delete(0, 99) 

Pour simplifier, j'ai ajouté les variables entryBox1 et entryBox2 dans un format que je pourrais attendre l'utilisateur de mettre en

Fondamentalement, je veux recevoir l'entrée dans 2 ou plus de boîtes de saisie tkinter, et quand un bouton est poussé, il regarde les entrées dans toutes les boîtes de saisie et affecte seulement ces entrées à leurs valeurs associées si elles sont des entiers. Si un ou plusieurs n'est pas un nombre entier, il ignore simplement cette entrée et continue. Une fois que toutes les entrées ont été examinées, valides ou non, il vide la zone d'entrée (avec entryBox1.delete (0,99))

Pour l'instant, si je devais utiliser les variables ci-dessus, la chaîne "pas un nombre "empêcherait que d'autres variables soient testées pour la validité. En fonction de ma lecture antérieure, je pense que je pourrais obtenir le résultat que je veux en mettant les arguments try/except dans une boucle for, mais je ne suis pas certain de la façon de procéder. Tout avis sera le bienvenu.

+1

Bien sûr, * ne faites pas 'return' *. 'return' quitte la fonction. –

+1

Comme l'a dit @Martijn, utilisez 'pass' au lieu de' return'. –

+0

OMG J'étais si proche! Merci à vous deux. – Agent

Répondre

1

Utilisez simplement une boucle for et return dans le bloc except.

EDIT: Comme points @TaraMatsyc, ajoutez également currentValuePumpOn/Off à la boucle.

def setValues(): 
    for eBox, currentValuePump in ((entryBox1, currentValuePumpOn), 
            (entryBox2, currentValuePumpOff)): 
     content = eBox .get() 
     if content != "": 
       try: 
        int(content) 
        currentValuePump.set(content) 
       except ValueError: 
        pass 
     eBox.delete(0, 99) 
+1

J'aime cette implémentation plus que l'originale, gardez juste en tête que 'currentValuePumpOn' et' currentValuePumpOff' pourraient être 2 objets différents. –

+2

@TarasMatsyk, je n'ai pas remarqué cela, merci d'avoir souligné. va le réparer – Netwave

+0

Cela a l'air sympa, le bit 'pass' a résolu ma question originale mais j'essayais aussi de penser à un moyen de gérer beaucoup plus d'entrées sans avoir à répéter l'essai/sauf plusieurs fois. Je pense que cela répond à cette question, alors merci! – Agent