2017-01-12 2 views
1

Ich habe Probleme zu verstehen, wie man einen Versuch außer Block schreiben, der nur einen Block oder den anderen nicht nur die Hälfte des Blocks läuft und dann zu der Ausnahme wie in meinem Beispiel f oder Betonung ich wünsche keinen Teil von Versuch zu laufen, wenn jede Zeile in VersuchPython: Nur laufender Ausnahmeblock, wenn try-Block fehlschlägt

x = 1 
y = 1 


try: 
    x = x+1 
    print(x) 
    x.append(1) 
except: 
    print(x) 

nicht die

der Rückkehr

2 
2 

statt zurück

1 

wie ich von erwartet würde. Das ist problematisch für mich, weil ich törichterweise den Eindruck hatte, dass nur der Block nach dem Fehlschlag ausgeführt würde. Ich kratze Websites mit schönen Suppe und meine Zuteilung einer Suppe wird in der Regel die Ausnahme werfen und der andere Block wird ausgeführt, aber unvorhergesehene Fehler nach diesem erlaubt einige Listen angefügt werden dann führt die Ausnahme Block und fügt sie erneut an. Ich habe Listen mit verschiedenen Längen, je nachdem, wo sie in jeden Block fallen.

jede Hilfe ist viel

geschätzt
+2

Aber Ihr try-Block * nicht * scheitern; 'x.append (1)' löst eine Ausnahme aus, weil x eine Ganzzahl ist. –

+0

@DanielRoseman Ich möchte keine der Try-Block zu laufen, wenn ein bestimmter Teil davon fehlschlägt, wie in meinem Beispiel möchte ich 1 nicht 2, 2 –

+0

zurückgeben Aber das macht keinen Sinn. Es muss laufen, um zu wissen, ob es scheitert. –

Antwort

2

Sie könnten den computed_result auf den Wert der x in außer-Block auf Fehler zurück:

x = 1 
y = 1 
computed_value = 0 

try: 
    computed_value = x + 1 
    #print(fallback_var) 
    computed_value.append(1) 
    print("Exceution succeed: keeping value") 
except: 
    print("Exceution failed: resetting value") 
    computed_value = x 
    #print(x) 


print(computed_value) 
+0

Dank Maurice, ich hatte auf etwas eleganteres gehofft, aber ich denke, dass ich das schaffen kann. –

+1

Eleganter könnte ein angepasstes [Befehlsmuster] sein (http://python-3-patterns-idioms-test.readthedocs.io/en/latest/FunctionObjects.html#command-choosing-the-operation-at-runtime) . –

+0

Danke, ich werde das lesen. –

0

Dieser Lauf beide.

Ihr Code

try: 
    x = x+1 
    print(x) 
    x.append(1) 
except: 
    print(x) 

Wenn Python Beginn der Ausführung Zeile für

x = x + 1 

Nach dieser x werden 2 Linie auszuführen.

dann

print (x) 

Drucken 2 wie in der Ausgabe zuerst.

x.append(1) 

Above statment raise Ausnahme, die durch except Klausel in Ihrem Code gefangen wird.

Bitte denken Sie daran, x Wert ist bereits auf 2 in x = x + 1 Statement geändert. In except wann Sie

print (x) 

Es 2 wieder drucken.

1

der Schritt Lassen Sie gehen Schritt:

Ihr Code richtig x=x+1 ausführt (jetzt x 2).

Dann führt es korrekt print(x) (so druckt 2).

Dann versucht es x.append(1) auszuführen (und scheitert)

Da es append(1) versagt hat es tritt die Ausnahme und führt print(x) (so druckt 2)

Es gibt genau das, was erwartet wird.

Verwandte Themen