2017-07-18 5 views
1

Ich schreibe ein Skript, das den Benutzer nach einem Statusnamen fragt. Das Skript überprüft, ob der Status tatsächlich im Wörterbuch vorhanden ist und gibt das Kapital zurück. Wenn der Staat nicht in der Dic ist, heißt es, dass das nicht im Wörterbuch ist. Ich habe es versucht, außer mit KeyError, aber Python gibt mir immer noch einen Fehler. Was habe ich falsch gemacht?Ausprobieren Ausnahmefehler - KeyError

state_dictionary = {'Colorado': 'Denver', 'Alaska': 'Juneau', 'California': 'Sacramento', 
         'Georgia': 'Atlanta', 'Kansas': 'Topeka', 'Nebraska': 'Lincoln', 
         'Oregon': 'Salem', 'Texas': 'Austin', 'New York': 'Albany'} 

if True: 
    search_state=input("What is the State of the Capital you want to know? ") 
    try: 
     state_dictionary[search_state] 
    except KeyError: 
     print ('No such a State') 
    print (state_dictionary[search_state]) 

What is the State of the Capital you want to know? Italia 
No such a State 

--------------------------------------------------------------------------- 
KeyError         Traceback (most recent call last) 
<ipython-input-38-c6d25bb66225> in <module>() 
    13  except KeyError: 
    14   print ('No such a State') 
---> 15  print (state_dictionary[search_state]) 

KeyError: 'Italia' 

Antwort

1

Sie tatsächlich versuchen, ein try zu implementieren, aber da man dann noch einen Anruf zu state_dictionary[search_state] in Ihrem Druck Aussage machen, ist es immer noch Fehler aus.

Versuchen:

state_dictionary = {'Colorado': 'Denver', 'Alaska': 'Juneau', 'California': 'Sacramento', 
         'Georgia': 'Atlanta', 'Kansas': 'Topeka', 'Nebraska': 'Lincoln', 
         'Oregon': 'Salem', 'Texas': 'Austin', 'New York': 'Albany'} 

if True: 
    search_state=input("What is the State of the Capital you want to know? ") 
    try: 
     state_dictionary[search_state] 
     print (state_dictionary[search_state]) 
    except KeyError: 
     print ('No such a State') 
1

Der Fehler wird tatsächlich kommen, am Ende des Codes Sie tun dies:

print (state_dictionary[search_state]) 

Also, Sie gefangen Ihre Ausnahme, und fuhr dann fort Ihr Code, indem Sie immer noch versuchen, auf die state zuzugreifen, die nicht existiert.

Legen Sie einfach den Druck in Ihrem Versuch, nachdem Sie versuchen, auf die state_dictionary zuzugreifen. Es wird nur dort ankommen, wenn es funktioniert. Machen Sie Ihren Anruf außerdem nicht zweimal. Speichern Sie Ihr Ergebnis in einer Variablen und drucken Sie dann das Ergebnis:

try: 
    capital = state_dictionary[search_state] 
    print (capital) 
except KeyError: 
    print ('No such a State') 

Außerdem Sie können Blick auf diese andere Art und Weise. Sie können das in Schlüsselwort verwenden um zu überprüfen, ob der Eintrag im Wörterbuch vorhanden ist:

search_state=input("What is the State of the Capital you want to know? ") 
if search_state in state_dictionary: 
    print (state_dictionary[search_state]) 
else: 
    print ('No such a State {}'.format(search_state)) 

Ein Bereich, der Verbesserung können Sie auch tun, ist, dass Sie jetzt die genauen Gehäuse erwarten übereinstimmen. Ich schlage vor, Sie ändern die Einträge in Ihrem Wörterbuch zu alle Kleinbuchstaben, und wenn Sie Ihre Eingabe erhalten, erzwingen Sie die Überprüfung zu lowercase als auch, wenn Sie also "Texas" eingeben, werden Sie tatsächlich übereinstimmen. Wie jetzt, wenn Sie "Texas" eingeben, wird es nicht "Texas" entsprechen.

So können jetzt tun (man beachte den Ruf nach search_state.lower()):

state_dictionary = {'colorado': 'Denver', 'alaska': 'Juneau', 'california': 'Sacramento', 
         'georgia': 'Atlanta', 'Kansas': 'Topeka', 'nebraska': 'Lincoln', 
         'oregon': 'Salem', 'texas': 'Austin', 'new york': 'Albany'} 

try: 
    capital = state_dictionary[search_state.lower()] 
    print (capital) 
except KeyError: 
    print ('No such a State') 
0

hinzufügen 'else' Anweisung zum Versuch mit Ausnahme. Es wird nur ausgeführt werden, wenn keine Ausnahme:

try: 
    state_dictionary[search_state] 
except KeyError: 
    print ('No such a State') 
else: 
    print (state_dictionary[search_state]) 
0

Sie einen Wörterbuch haben, können Sie einfach state_dictionary.get(key) verwenden, um keine Fehler zu werfen und keine bekommen, wenn sie noch nicht existiert. Besser als versuchen zu müssen.