2016-10-14 6 views
0

Ich benutze Python. Ich habe eine Funktion (getAll), die andere Funktion in einer Schleife (getPart) aufrufen und in jedem Schritt wird der Rückgabewert aktualisiert. In einigen Fällen, wenn ich die Funktion innerhalb der Schleife aufrufen, scheitern diese. Ich muss das Ergebnis in diesem Moment zurückgeben.Teil des Ergebnisses zurückgeben, wenn auftreten, außer

def getAll(m, d, v, t, s, tn, type): 
    result = [] 
    flag = 0 
    while flag == 0: 
    tempResult = getPart(m, d, v) 
    for i in range(0, len(tempResult)): 
     result.append(tempResult[i]) 
    flag = tempResult[0] 
    return result 

print getAll(5,4,1,'ds',8,'data') 

Ich brauche das Ergebnis Teilwert drucken, wenn eine Ausnahme in einem gewissen Schritt auftreten, wenn ich TempResult in getAll nennen

Antwort

3

Klingt wie Sie versuchen, verwenden müssen, außer Blöcke

def getAll(m, d, v, t, s, tn, type): 
    result = [] 
    flag = 0 
    while flag == 0: 
     try: #start of the try block. 
      tempResult = getPart(m, d, v) 
      for i in range(0, len(tempResult)): 
       result.append(tempResult[i]) 
      flag = tempResult[0] 
     except: #handle what ever errors comes here 
      return tempResult 
    return tempResult 

Grundsätzlich Wenn Sie einen Fehler bemerken oder ein Fehler auftritt, wird es ausgeführt, was auch immer im Block außer ist, da wir setzen return tempResult wird es den Wert zurückgeben.

Wie der Kommentar sagt, alle Ausnahmen zu kontrollieren ist eine schlechte Idee, da Sie einen Fehler treffen könnten, die nichts mit Ihrem Code zu tun hat, und es wird es für bestimmte Ausnahmen abfangen sollten Sie tun:

try: 
    #do something 
except <Error name like "ValueError"> 
    #handle it 

Sie können auch mehr Fehler Details wie sehen:

try: 
    #do something 
except ValueError as e: 
    #handle it 
    print(e) #prints the error 

So finden Sie heraus, welche Fehler wird dazu führen, dass Ihr Programm zu stoppen und es dort platzieren.

+2

Der OP angeben muss, welche Ausnahme (n) er ist ansteckend, weil es eine schlechte Idee ist, eine Decke zu haben 'except' – brianpck

+0

Ich werde aktualisieren zustimmen. – MooingRawr

3

Sie können die Ausnahme behandeln, indem Sie den Code Verpackung, die den Fehler mit einem try/except und Druck das Ergebnis im except Block aufwirft:

def getAll(m, d, v, t, s, tn, type): 
    result = [] 
    flag = 0 
    while flag == 0: 
     try: 
      tempResult = getPart(m, d, v) 
     except SomeError: # specify error type 
      print('The partial result is', result) 
      raise # re-raise error 
     for i in range(0, len(tempResult)): 
      result.append(tempResult[i]) 
     flag = tempResult[0] 
    return result 

print getAll(5,4,1,'ds',8,'data') 

Auf einer anderen Anmerkung, da Sie bereits getPart wissen Aufruf könnte erhöhen ein Fehler, Sie können den try/except Block in die Funktion verschieben. Dies hängt natürlich davon ab, was genau Sie erreichen möchten.

1

Dies ist nicht unbedingt die beste Lösung, da es je nach Fehler besser sein kann, es zu verhindern, als es auf diese Weise zu behandeln. Sie können jedoch try (kein Wortspiel ursprünglich beabsichtigt ...) die folgenden (wobei WhateverError die Fehler, die in Ihrem Fall erhöht wird):

def getAll(m, d, v, t, s, tn, type): 
    result = [] 
    flag = 0 
    while flag == 0: 
    try: 
     tempResult = getPart(m, d, v) 
    except WhateverError: 
     return result 
    for i in range(0, len(tempResult)): 
     result.append(tempResult[i]) 
    flag = tempResult[0] 
    return result 

print getAll(5,4,1,'ds',8,'data') 
1

Wickeln Sie Ihre Methode in einem Versuch, außer Block. Möglicherweise möchten Sie eine Ausnahme auslösen, damit Sie auch darauf reagieren können.

def getAll(m, d, v, t, s, tn, type): 
    result = [] 
    flag = 0 
    try: 
     while flag == 0: 
      tempResult = getPart(m, d, v) 
      for i in range(0, len(tempResult)): 
       result.append(tempResult[i]) 
      flag = tempResult[0] 
     return result 
    except Exception as e: 
     print e 
     return result 
Verwandte Themen