2013-03-20 5 views
6

Ich arbeite an einem Projekt, das eine Last von If, Elif, Elif, ...Else Strukturen verwendet, die ich später für switch-artige Anweisungen geändert habe, wie gezeigt here und here.python - 'else' in Wörterbuch-Schaltanweisungen simulieren

Wie würde ich mich über das Hinzufügen von einem allgemeinen Fall „Hey, diese Option nicht vorhanden ist“ ähnlich eine Else in einer If, Elif, Else Aussage - etwas, das, wenn keiner der If s oder Elif s laufen bekommt ausgeführt wird?

Antwort

5

Sie können den KeyError Fehler, der auftritt, wenn ein Wert in der Karte nicht gefunden wird, abfangen und dort einen Standardwert zurückgeben oder verarbeiten. Zum Beispiel mit n = 3 Dieses Stück Code:

if n == 1: 
    print 'one' 
elif n == 2: 
    print 'two' 
else: 
    print 'too big!' 

wird dies:

choices = {1:'one', 2:'two'} 
try: 
    print choices[n] 
except KeyError: 
    print 'too big!' 

oder so, wird auf der Konsole 'too big!' gedruckt.

+2

Ah, so einfach, wie habe ich es überhaupt nicht gesehen! Danke trotzdem, ich bin mir sicher, dass jemand anderes auch Hilfe dabei haben könnte: P –

+0

Oh, natürlich. Lass es mich zuerst ausprobieren - ich bin nur ein Mann! : P –

7

Wenn das else wirklich keine Ausnahmesituation ist, wäre es nicht besser, den optionalen Parameter für get zu verwenden?

>>> choices = {1:'one', 2:'two'} 
>>> print choices.get(n, 'too big!') 

>>> n = 1 
>>> print choices.get(n, 'too big!') 
one 

>>> n = 5 
>>> print choices.get(n, 'too big!') 
too big! 
1

Die first article Sie eine sehr saubere Lösung hatte verbunden:

response_map = { 
    "this": do_this_with, 
    "that": do_that_with, 
    "huh": duh 
} 
response_map.get(response, prevent_horrible_crash)(data) 

Dies ruft prevent_horrible_crash wenn response nicht einer der in response_map aufgeführten drei Möglichkeiten ist.

0

Angenommen, Sie haben eine Funktion f (a, b) und verschiedene Parametereinstellungen entsprechend dem Wert einer Variablen x. Sie wollen also f mit a = 1 und b = 3 ausführen, wenn x = 'Montag' und wenn x = 'Samstag', wollen Sie f mit a = 5 und b = 9 ausführen. Andernfalls werden Sie drucken, dass ein solcher Wert von x nicht unterstützt wird.

würde ich

from functools import partial 
def f(a,b): 
print("A is %s and B is %s" % (a,b)) 

def main(x): 
switcher = { 
      "Monday": partial(f,a=1, b=3), 
      "Saturday": partial(f, a=5, b=9) 
      } 
if x not in switcher.keys(): 
    print("X value not supported") 
    return 

switcher[x]() 

auf diese Weise f nicht auf Erklärung Switcher ausgeführt wird, aber in der letzten Zeile tun.