2016-06-12 20 views
-1

ich derzeit Debuggen einer Funktion (produceEntry), deren Ergebnisse in einer Liste Verständnis gespeichert sind:Debuggen vorherigen Einträge in teilweise gefüllten Liste Verständnis

entries = [produceEntry(i) for i in range(i)] 

Der Fehler in der Funktion manifestiert sich in einer der mittleren Einträge und ich Ich möchte die vorherigen Einträge einsehen, bekomme aber keinen Zugriff.

Offensichtlich kann ich den Code zu

entries = [] 
for i in range(i): 
    entries.append(produceEntry(i)) 

restrukturieren, aber ich würde viel lieber mag nicht den Code für Debugging-Zwecke nur ändern.

Gibt es eine Möglichkeit, auf die bereits verarbeiteten Einträge im Listenverständnis zuzugreifen?

+1

Nicht, dass ich weiß, behandelt der Debugger das als eine logische Operation. Schauen Sie sich stattdessen die Funktion an, die Sie anrufen. – jonrsharpe

+0

@jonrsharpe Blick in die Funktion bietet nicht genügend Kontext. Ich brauche die Ergebnisse der vorherigen Aufrufe. Aber ich kann keinen Breakpoint in der Funktion setzen, wie er tausende Male ohne Fehler aufgerufen wird. – Nobody

+0

Warum brauchen Sie das? Hängt Ihre Funktion irgendwie vom Ergebnis ab? Ich glaube nicht, dass Sie sogar auf sie zugreifen können. – jonrsharpe

Antwort

-1

Als jonrsharpe bereits erwähnt, sollte ein Listenverständnis als eine einzige Operation behandelt werden, so dass Sie nicht auf Teilergebnisse zugreifen können.

In Ihrem Fall könnten Sie zum Beispiel Ihre Fehler abfangen und ersetzen Sie es mit einem Fehler-Flag:

def produceEntry(i): 
    try: 
     return 1/(5 - i) 
    except ZeroDivisionError: 
     return 'ERROR' 

entries = [produceEntry(i) for i in range(10)] 

Druck Einträge, wird die Ausgabe wie folgt aussehen:

[0, 0, 0, 0, 1, 'ERROR', -1, -1, -1, -1] 

Hier ist der fünfte Ich habe einen ZeroDivisionError erzeugt, wurde aber stattdessen durch 'ERROR' ersetzt. Jetzt können Sie mit den Teileinträgen basteln, und wenn Sie mit dem Debuggen fertig sind, ändern Sie einfach die Ausnahmebehandlung entsprechend Ihrem Anwendungsfall. Ihr tatsächlicher Code bleibt unverändert.

+0

Die Idee eines Debuggers ist, mit dem Zustand am Fehlerort interagieren zu können. Dies ist völlig verloren, wenn man auf das vollständige Verständnis warten muss. – Nobody