2016-06-12 11 views
1

Zumindest das ist das Meiste, dass ich Sinn machen kann, und ich habe über den Fluss der Ausführung für Stunden verfolgt. Hier ist der relevante Ausschnitt aus dem Code:Python-Funktion scheint nicht nach der Rückkehr zu beenden

def check_list(inputList): 
    '''checks if list is composed of numbers, and, if so, returns a new list of purely integers''' 
    VerifiedDataSet = [] 
    for i in inputList: 
     try: 
      VerifiedDataSet.append(int(i)) 
     except: 
      print("Value in", inputList.index(i) + 1, "position isn't a number!") 
      return "not approved" 
    return ("approved", VerifiedDataSet) 

print("This program will make your data set into a color coded bar graph (eventually)!") 

listStatus = "not approved" 

while listStatus == "not approved": 
    dataSet = ["1", "2", "foo"] #for illustration of behavior 
    result = check_list(dataSet) 
    listStatus = result[0] 
    if listStatus == 'approved': 
     dataSet = result[1] 
    else: 
     pass 

print("You should not see this.") 

Die Idee, die Funktion check_list Iterierte durch eine eingegebene Liste zu haben war und versuchen, jedes Element in eine ganze Zahl umgewandelt wird. Wenn es eine Ausnahme gäbe, würde sie die Position des Wertes ausgeben, der nicht in eine Ganzzahl umgewandelt werden konnte, und zurückgeben, dass die Liste nicht genehmigt wurde, was 1) die Funktion beenden sollte und 2) die while-Schleife weitermachen soll .

Nur wenn es keine Ausnahmen gab, sollte der Iterator vollständig sein und die Funktion die Zeichenfolge "approved" (um die while-Schleife zu beenden) und die neue Liste von ganzen Zahlen zurückgeben. Allerdings, von dem, was ich sammeln kann, ist listStatus irgendwie irgendwie "genehmigt", wie die letzte print ausgeführt wird, wenn es nie sein sollte.

Irgendwelche Ideen, was könnte dieses Verhalten verursachen?

+0

Könnte ich erkundigen, warum Sie so weit gehen, um zu vermeiden, dass der 'ValueError' aus der fehlgeschlagenen Konvertierung einfach von' check_list() 'herunterrieselt? – dhke

+0

@dhke Ich nehme an, du deutest an, dass es einen weitaus effizienteren Weg gibt, zu tun, was ich versuche zu tun (und ich würde es nicht bezweifeln). Der Grund dafür ist, dass ich immer noch sehr neu in Python bin und generell programmieren. Ich habe mit Ausnahmen ein wenig gespielt, aber ich denke nicht, dass ich noch weiß, was ich mit ihnen anfangen soll oder wie ich sie zu meinem Vorteil nutzen kann. Bald vielleicht! :) – bream

Antwort

0

Der von der Funktion zurückgegebene Wert ist eine Zeichenfolge. Daher wird das Ergebnis den Wert "nicht genehmigt" haben.

listStatus = result[0]

Dies wird listStatus machen = 'n' und nicht "nicht genehmigt".

+3

sorge mich, warum meine Antwort abgelehnt wird? – SilentMonk

2

Wenn eine Ausnahme Sie 'not approved' aus der Funktion zurückkehrt, werden angehoben

die listStatus == 'n' macht daher die while Schleife bricht.

+0

'listStatus' wurde anfänglich auf" nicht "in Ihrer Antwort gesetzt. Daher der Downvote. Nicht weil du mich geschlagen hast wie @TheLazyScripter denkt. – SilentMonk

+2

Also entfernen Sie Ihre Down-Abstimmung @SilentMonk? – TheLazyScripter

+0

@ TheLazyScripter, Sicher. Achte darauf, deinen Kommentar zu entfernen? – SilentMonk

Verwandte Themen