2017-11-20 3 views
0

Ich denke, das sollte ein bisschen schwierig sein, aber irgendwie machbar, aber ich brauche Hilfe. Ich möchte zwei Funktionen innerhalb meiner Main() -Funktion ausführen. Ich möchte in der Lage sein, Ausnahmen von den beiden getrennt abzufangen, aber immer noch beides auszuführen und das Ergebnis von mindestens einem von ihnen zu erhalten, wenn der andere eine Ausnahme auslöst.Python - nach Ausnahme weitermachen und danach erhöhen

Lasst uns sagen, ich habe:

def foo(): 
    raise TypeError 

def bar(): 
    return 'bar' 

Wenn ich (von here angepasst):

def multiple_exceptions(flist): 
    for f in flist: 
     try: 
      return f() 
     except: 
      continue 

def main(): 
    multiple_exceptions([foo, bar]) 

main() 

main() würde 'bar' zurückkehren, aber ich möchte in der Lage sein, noch die Ausnahme werfen von foo() immerhin. Auf diese Weise hätte ich immer noch das Ergebnis einer meiner Funktionen und die Information über den Fehler ist in der anderen aufgetreten.

+0

wie Sie von diesen Methoden aufrufen? –

+0

Ich habe den Code bearbeitet, um dies zu beantworten. – umbe1987

+0

Welche Ausgabe erhalten Sie gerade? –

Antwort

0

Danke für die Kommentare. ich dadurch behoben:

def multiple_exceptions(flist): 

    exceptions = [] 

    for f in flist: 
     try: 
      f() 
     except Exception as e: 
      exceptions.append(e.message) 
      continue 

    return exceptions 

def main(): 
    multiple_exceptions([foo, bar]) 

error_messages = main() # list of e.messages occurred (to be raised whenever I want) 

Dann kann ich meine Ausnahme wie zum Beispiel erhöhen raise Exception(error_messages[0]) (Ich interessiere mich nur für die erste in diesem Fall sagen wir).

+0

Wenn Sie glauben, dies beantwortet die Frage am besten; akzeptiere es als Antwort. Sie müssen die Frage nicht offen lassen, nur weil Sie die Lösung geschrieben haben - es ist absolut nichts Falsches daran, Ihre eigene Antwort zu akzeptieren, wenn sie korrekt ist. – Bilkokuya

1

Sie können die Ausnahmen erfassen und speichern mit ‚als‘, z.B .:

try: 
    raise Exception('I am an error!') 
    print('The poster messed up error-handling code here.') #should not be displayed 
except Exception as Somename: 
    print(Somename.message) 
    # you'll see the error message displayed as a normal print result; 
    # you could do print(stuff, file=sys.stderr) to print it like an error without aborting 

print('Code here still works, the function did not abort despite the error above') 

...or you can do: 
except Exception as Somename: 
    do_stuff() 
    raise Somename 
+1

Bearbeitet - Ich dachte, dass meine ursprüngliche Antwort implizieren könnte, dass Sie print w/sys.stderr verwenden müssen, um die Fehlermeldung zu erhalten; Sie können den Fehler auch später in aller Ruhe mit allen Konsequenzen nachholen. – jkm

Verwandte Themen